Próbuję utworzyć niestandardową komórkę widoku tabeli ze stalówki. Mówię o tym artykule tutaj . Mam dwa problemy.
Utworzyłem plik .xib z przeciągniętym na niego obiektem UITableViewCell. Utworzyłem podklasę UITableViewCell
i ustawiłem ją jako klasę komórki i Cell jako identyfikator wielokrotnego użytku.
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
}
}
W UITableViewController mam ten kod,
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
}
}
Ten kod jest zgodny bez błędów, ale kiedy uruchamiam go w symulatorze, wygląda to tak.
W UITableViewController w scenorysie nie zrobiłem nic z komórką. Pusty identyfikator i brak podklasy. Próbowałem dodać identyfikator komórki do komórki prototypowej i uruchomiłem ją ponownie, ale otrzymałem ten sam wynik.
Innym błędem, z którym się spotkałem, jest próba zaimplementowania następującej metody w 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]
}
Jak pokazano w artykule wspomniałem Zmieniłem cell
formę typu parametru UITableViewCell
do CustomOneCell
którego jest moim podklasy UITableViewCell. Ale pojawia się następujący błąd,
Przesłanianie metody za pomocą selektora „tableView: willDisplayCell: forRowAtIndexPath:„ ma niezgodny typ ”(UITableView !, CustomOneCell !, NSIndexPath!) -> ()”
Czy ktoś ma pomysł, jak rozwiązać te błędy? Wydawało się, że działają dobrze w Objective-C.
Dziękuję Ci.
EDYCJA: Właśnie zauważyłem, że jeśli zmienię orientację symulatora na poziomą i wrócę do portretu, komórki się pojawią! Nadal nie mogłem dowiedzieć się, co się dzieje. Wrzuciłem tutaj projekt Xcode pokazujący problem, jeśli masz czas na szybkie spojrzenie.