Я пытаюсь создать настраиваемую ячейку представления таблицы из пера. Я имею в виду эту статью здесь . У меня две проблемы.
Я создал файл .xib с перетащенным на него объектом UITableViewCell. Я создал подкласс UITableViewCell
и установил его как класс ячейки, а Cell как повторно используемый идентификатор.
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
}
}
В UITableViewController у меня есть этот код,
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
}
}
Этот код не содержит ошибок, но когда я запускаю его в симуляторе, он выглядит так.
В UITableViewController в раскадровке я ничего не сделал с ячейкой. Пустой идентификатор и без подкласса. Я попытался добавить идентификатор Cell в ячейку прототипа и снова запустил его, но получил тот же результат.
Еще одна ошибка, с которой я столкнулся, - это когда я пытался реализовать следующий метод в 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]
}
Как показано в этой статье я упоминал , что я изменил cell
форму типа параметра UITableViewCell
в CustomOneCell
которое мой подкласс UITableViewCell. Но я получаю следующую ошибку:
Метод переопределения с помощью селектора tableView: willDisplayCell: forRowAtIndexPath: имеет несовместимый тип (UITableView !, CustomOneCell !, NSIndexPath!) -> () '
Кто-нибудь знает, как исправить эти ошибки? Похоже, они отлично работали в Objective-C.
Спасибо.
РЕДАКТИРОВАТЬ: Я только что заметил, что если я изменю ориентацию симулятора на альбомную и верну ее обратно в портретную, появятся ячейки! Я все еще не мог понять, что происходит. Я загрузил здесь проект Xcode, демонстрирующий проблему, если у вас есть время быстро взглянуть.