2015-10-22 7 views
2

У меня есть пользовательский подкласс UITableViewCell с простой установкой IBOutlet для UILabel.Пользовательский UITableviewCell IBOutlet всегда nil

class SegmentCell: UITableViewCell { 

    @IBOutlet weak var test: UILabel! 

    override init(style: UITableViewCellStyle, reuseIdentifier: String?) { 
     super.init(style: style, reuseIdentifier: reuseIdentifier) 
     test.text = "Some Text" 
    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 

} 

Убежденный, что все правильное настроено, соответствовало другим ответам, но UILabel всегда ноль.

ViewController: viewDidLoad:

self.tableView.registerClass(SegmentCell.self, forCellReuseIdentifier: "Cell") 

cellForForAtIndexPath

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell") as! SegmentCell 
    return cell 
} 
  • Сотовый установлено значение Пользовательский
  • идентификатор
  • Повторное использование является правильным класса
  • клеток SegmentCell
  • Содержание таблиц - это динамические прототипы

Что мне не хватает?

+0

Вам не нужны называть self.tableView.registerClass (SegmentCell.self, forCellReuseIdentifier: "Cell") на viewDidLoad, просто установите prototypeCells класса на «SegmentCell» на Mainstoryboard. –

ответ

0

Основываясь на том, как вы регистрируете свою ячейку, она не будет загружать ее из раскадровки или файла xib. Он будет вызывать только этот метод init. Ваш метод init не создает ярлык, поэтому он всегда будет nil.

Вы должны также использовать dequeueReusableCellWithIdentifier(_:forIndexPath:) вместо dequeueReusableCellWithIdentifier(_:). Последний предшествует раскадровки и возвращает nil, если вы ранее не создали ячейку с этим идентификатором и не вернули ее.

Наконец, метод инициализации, что tableView звонит не один вы реализовали, или приложение будет врезаться на test.text = ... при попытке разворачивать nil необязательными.

+0

Я создаю его в раскадровке, в прототипе ячейки. –

+0

Тогда вы не должны регистрировать его с помощью «tableView» в коде, и вы можете ожидать, что 'init (coder:)' будет вызван. –

+0

Итак, я удалил 'tableView.registerClass' и изменил метод init в классе SegmentCell на' required init? (Coder aDecoder: NSCoder) {'все еще имеет ту же проблему –

-1

Необходимо сначала зарегистрировать его в функции viewDidLoad.

self.tableView.registerClass(CustomCell.self, forCellReuseIdentifier: "Cell") 
+0

Пользователь уже регистрирует этот класс. У меня есть эта проблема, после добавления пользовательской ячейки в uitableview в Storyboard. – iTux

0

У меня такая же проблема, после добавления пользовательского класса ячеек в ячейку в виде таблицы, размещенной в раскадровке. Я также регистрирую ячейку, как в документации. Но теперь я решаю свою проблему.

"Я удалить регистрации и снова проверьте клетку, все IBOutlets инициализированы"

Смежные вопросы