Я пытаюсь создать пользовательскую ячейку представления таблицы из наконечника. Я имею в виду эту статью здесь. Я столкнулся с двумя проблемами.
Я создал файл .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 в раскадровке я ничего не сделал с ячейкой. Пустой идентификатор и отсутствие подкласса. Я попытался добавить идентификатор ячейки в ячейку прототипа и снова запустить его, но получаю тот же результат.
Еще одна ошибка, с которой я столкнулся, заключается в том, когда я попытался реализовать следующий метод в 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.
Спасибо.
EDIT: Я только заметил, изменил ли я ориентацию симулятора на пейзаж и вернул его к портрету, ящики появятся! Я все еще не мог понять, что происходит. Я загрузил проект Xcode здесь, демонстрируя проблему, если у вас есть время для быстрого просмотра.