J'essaie de créer une cellule de vue de tableau personnalisée à partir d'une pointe. Je fais référence à cet article ici . Je suis confronté à deux problèmes.
J'ai créé un fichier .xib avec un objet UITableViewCell glissé dessus. J'ai créé une sous-classe de UITableViewCell
et l' ai définie comme classe de la cellule et Cell comme identificateur réutilisable.
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
}
}
Dans le UITableViewController, j'ai ce code,
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
}
}
Ce code est conforme sans erreur mais lorsque je l'exécute dans le simulateur, il ressemble à ceci.
Dans UITableViewController dans le storyboard, je n'ai rien fait à la cellule. Identifiant vide et pas de sous-classe. J'ai essayé d'ajouter l' identifiant de cellule à la cellule prototype et je l'ai relancé mais j'obtiens le même résultat.
Une autre erreur que j'ai rencontrée est, lorsque j'ai essayé d'implémenter la méthode suivante dans 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]
}
Comme indiqué dans l'article que j'ai mentionné, j'ai changé le cell
formulaire de type du paramètre UITableViewCell
à CustomOneCell
qui est ma sous-classe de UITableViewCell. Mais j'obtiens l'erreur suivante,
Méthode de remplacement avec le sélecteur 'tableView: willDisplayCell: forRowAtIndexPath:' a un type incompatible '(UITableView !, CustomOneCell !, NSIndexPath!) -> ()'
Quelqu'un a une idée de la façon de résoudre ces erreurs? Celles-ci semblaient bien fonctionner en Objective-C.
Je vous remercie.
EDIT: Je viens de remarquer que si je change l'orientation du simulateur en paysage et le remet en portrait, les cellules apparaissent! Je n'arrivais toujours pas à comprendre ce qui se passait. J'ai téléchargé un projet Xcode ici démontrant le problème si vous avez le temps de jeter un coup d'œil rapide.