Estoy tratando de crear una celda de vista de tabla personalizada a partir de una punta. Me refiero a este artículo aquí . Estoy enfrentando dos problemas.
Creé un archivo .xib con un objeto UITableViewCell arrastrado sobre él. Creé una subclase de UITableViewCell
y la configuré como la clase de la celda y Cell como el identificador reutilizable.
import UIKit
class CustomOneCell: UITableViewCell {
@IBOutlet weak var middleLabel: UILabel!
@IBOutlet weak var leftLabel: UILabel!
@IBOutlet weak var rightLabel: UILabel!
required init(coder aDecoder: NSCoder!) {
super.init(coder: aDecoder)
}
override init(style: UITableViewCellStyle, reuseIdentifier: String!) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
}
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}
En el UITableViewController tengo este código,
import UIKit
class ViewController: UITableViewController, UITableViewDataSource, UITableViewDelegate {
var items = ["Item 1", "Item2", "Item3", "Item4"]
override func viewDidLoad() {
super.viewDidLoad()
}
// MARK: - UITableViewDataSource
override func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int {
return items.count
}
override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
let identifier = "Cell"
var cell: CustomOneCell! = tableView.dequeueReusableCellWithIdentifier(identifier) as? CustomOneCell
if cell == nil {
tableView.registerNib(UINib(nibName: "CustomCellOne", bundle: nil), forCellReuseIdentifier: identifier)
cell = tableView.dequeueReusableCellWithIdentifier(identifier) as? CustomOneCell
}
return cell
}
}
Este código no cumple errores, pero cuando lo ejecuto en el simulador, se ve así.
En UITableViewController en el guión gráfico, no he hecho nada a la celda. Identificador en blanco y sin subclase. Intenté agregar el identificador de celda a la celda prototipo y lo ejecuté nuevamente, pero obtengo el mismo resultado.
Otro error que enfrenté es cuando intenté implementar el siguiente método en UITableViewController.
override func tableView(tableView: UITableView!, willDisplayCell cell: CustomOneCell!, forRowAtIndexPath indexPath: NSIndexPath!) {
cell.middleLabel.text = items[indexPath.row]
cell.leftLabel.text = items[indexPath.row]
cell.rightLabel.text = items[indexPath.row]
}
Como se muestra en el artículo que mencioné, cambié la cell
forma de tipo del parámetroUITableViewCell
al CustomOneCell
que es mi subclase de UITableViewCell. Pero me sale el siguiente error,
Método de anulación con el selector 'tableView: willDisplayCell: forRowAtIndexPath:' tiene un tipo incompatible '(UITableView !, CustomOneCell !, NSIndexPath!) -> ()'
¿Alguien tiene alguna idea de cómo resolver estos errores? Estos parecían funcionar bien en Objective-C.
Gracias.
EDITAR: ¡Acabo de notar que si cambio la orientación del simulador al paisaje y lo vuelvo a hacer vertical, aparecen las celdas! Todavía no podía entender qué está pasando. Subí un proyecto de Xcode aquí que demuestra el problema si tienes tiempo para echar un vistazo rápido.