Добавление 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Пожалуйста, добавьте метку в эти две функции.

Другие вопросы по тегам