Добавление UILabel в пользовательский tableViewCell программно
Я пытаюсь добавить метку программно в ячейку пользовательского табличного представления. Приложение по-прежнему будет аварийно завершать работу с "неожиданно найденным нулем". Я просмотрел другие посты здесь, но я не вижу, что я делаю неправильно. Пожалуйста, смотрите код для деталей.
import UIKit
class MyTableViewCell: UITableViewCell {
var titleLabel: UILabel!
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
titleLabel = UILabel()
titleLabel.textColor = UIColor.blackColor()
titleLabel.font = UIFont.systemFontOfSize(17)
titleLabel.frame = CGRect(x: 40.0, y: 2, width: bounds.width, height: bounds.height)
addSubview(titleLabel)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
}
Внутри контроллера просмотра:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("CustomCell", forIndexPath: indexPath) as! MyTableViewCell
// Crashes the app with: 'fatal error: unexpectedly found nil while unwrapping an Optional value'
cell.titleLabel.text = "Some text"
}
Пользовательский класс табличного представления правильно назначен ячейке прототипа в раскадровке.
Если я изменю декларацию внутри MyTableViewCell
в var titleLabel = UILabel()
и удалите эту строку изнутри init()
отобразится табличное представление, но моя метка не появится. Код выглядит хорошо для меня, какой-нибудь совет относительно того, что я могу упустить здесь?
1 ответ
Вы создали пользовательскую ячейку в раскадровке, поэтому вам не нужно регистрировать класс для представления таблицы. И вызовы из раскадровки будут вызывать initWithCoder
а также awakeFromNib
Пожалуйста, добавьте метку в эти две функции.