2016-12-30 2 views
0

Я прихожу к вам небольшой вопрос у меня есть, что может на самом деле быть не так сложно, но что я изо всех сил о сейчас около часа ...Set TextLabel в tableViewCell

Я определил TableViewCell в TableViewController. Этот TableViewCell имеет три UIImage и две текстовые метки. Я реализовал следующие методы:

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return fruits.count 
} 

(который в моем смысле определяет число строк)

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "friendListCell") 
    cellOutlet.nameTextLabel.text = fruits[indexPath.row] 
    return cell! 
} 

На этом втором способе «cellOutlet» является экземпляром класса, который определяет мою ячейку , в котором я изменяю один из текста textLabel. «фрукты» - это простой массив строк, которые должны отображаться в каждой ячейке моего приложения один за другим.

компиляция идет хорошо, но при обращении к странице в вопросе, то сбой приложения говоря

неожиданно нашли ноль в то время как разворачивание необязательное значение

Мой вопрос заключается в следующем:

Есть ли у вас представление о том, что сделано неправильно в отношении доступа к тексту textLabel?

Заранее благодарен!

+0

попробовать 'cell.nameTextLabel.text = фрукты [indexPath.row]', а также проверить розетка правильно подключен или нет –

ответ

0

Try позвонить

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "friendListCell") 
    cell.nameTextLabel.text = fruits[indexPath.row] 
    return cell! 
} 

, а также проверить «ячейка» не должна быть нулем в момент вызова cell.nameTextLabel.text = fruits[indexPath.row]

2

Если вы используете пользовательский класс TableViewCell вы должны

  • Установите класс ячейки в Interface Builder в пользовательский класс
  • Вставьте ячейку соответственно в cellForRow... (предполагается, что имя является MyTableViewCell)

    let cell = tableView.dequeueReusableCell(withIdentifier: "friendListCell" for:indexPath) as! MyTableViewCell 
    
0

Даже если пользовательские UITableViewCell класс (например, FruitsCell) имеет несколько ярлыков, стандартный UITableViewCell не является (кроме одного, который является его свойством label). В вашем коде свойство «cell» имеет тип UITableViewCell, который не имеет свойства cellOutlet или nameTextLabel для доступа.

Если вы настроили свою собственную ячейку в IB, обязательно соедините все свои ярлыки с IB с кодом в вашем Swift-файле, например. FruitsCell.swift, который содержит класс FruitsCell.

Затем отбросить «ячейку» в методе делегата ViewControllers, например. FruitCell вместо UITableViewCell. Только тогда вы можете получить доступ к ярлыкам этого класса, которые вы создали в IB.

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    // casting to your Class 
    let cell = tableView.dequeueReusableCell(withIdentifier: "friendListCell") as! FruitCell 

    // accessing that Class' properties 
    cell.nameTextLabel.text = fruits[indexPath.row] 

    // returning cell of type FruitCell 
    return cell! 
} 
+0

Эй Там! Спасибо за ваш ответ и с новым годом! Итак, я просто бросил камеру, так же, как вы это сделали, что позволило мне получить доступ к имениTextLabel. Единственное отличие моего кода от того, что вы написали, это 'cell.nameTextLabel? .text = fruits [indexPath.row]' вместо 'cell.nameTextLabel.text = fruits [indexPath.row]' Xcode настаивает на распаковке textLabel и что приводит к пустой ячейке ... Может быть, у вас будет представление о том, что именно неправильно? Данные, которые я пытаюсь сохранить в Label, являются действительными и могут быть напечатаны, поэтому я предполагаю, что это действительно касается только самой метки –

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