Estou tentando criar uma célula de exibição de tabela personalizada a partir de uma ponta. Estou me referindo a este artigo aqui . Estou enfrentando dois problemas.
Criei um arquivo .xib com um objeto UITableViewCell arrastado para ele. Criei uma subclasse UITableViewCell
e a defini como classe da célula e Cell como identificador reutilizável.
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
}
}
No UITableViewController eu tenho esse 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 está em conformidade com nenhum erro, mas quando o executo no simulador, ele se parece com isso.
No UITableViewController no storyboard, não fiz nada na célula. Identificador em branco e nenhuma subclasse. Eu tentei adicionar o celular identificador de à célula protótipo e executei-o novamente, mas obtive o mesmo resultado.
Outro erro que enfrentei foi quando tentei implementar o seguinte método no 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]
}
Conforme mostrado no artigo que mencionei, alterei o cell
formulário do tipo de parâmetro UITableViewCell
para o CustomOneCell
qual é minha subclasse de UITableViewCell. Mas eu recebo o seguinte erro,
Substituindo método com o seletor 'tableView: willDisplayCell: forRowAtIndexPath:' possui tipo incompatível '(UITableView !, CustomOneCell !, NSIndexPath!) -> ()'
Alguém tem alguma idéia de como resolver esses erros? Eles pareciam funcionar bem no Objective-C.
Obrigado.
EDIT: Acabei de notar que, se eu mudar a orientação do simulador para paisagem e voltar ao retrato, as células aparecerão! Eu ainda não conseguia descobrir o que estava acontecendo. Fiz upload de um projeto Xcode aqui demonstrando o problema se você tiver tempo para uma rápida olhada.