2017-02-18 6 views
1

Мои TableView ячейки субтитры не отображаются, когда я использую это:субтитры Tableview клеток не показывать или приложение завершает работу

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

    var cell:UITableViewCell? 

    if tableView.tag == 1 { 

     guard let latestCell = tableView.dequeueReusableCell(withIdentifier: "latestCell") else { 
      return UITableViewCell(style: .subtitle, reuseIdentifier: "latestCell") 
     } 



     latestCell.textLabel?.text = latest[indexPath.row] 

     latestCell.detailTextLabel?.text = latestSub[indexPath.row] 

     latestCell.accessoryType = .disclosureIndicator 

     return latestCell 


    } 
} 

Но если я использую это:

else if tableView.tag == 2 { 

     let olderCell = UITableViewCell(style: UITableViewCellStyle.subtitle, reuseIdentifier: "olderCell") 



     olderCell.textLabel?.text = older[indexPath.row] 

     olderCell.detailTextLabel?.text = olderSub[indexPath.row] 

     olderCell.accessoryType = .disclosureIndicator 

     return olderCell 
    } 

    else { 
     return cell! 
    } 
} 

Груз субтитры отлично , но после того, как я закрою приложение и перезагружу представление, приложение автоматически заработает, не давая журнала сбоев или не отвечая меня на вкладку отладки.

Я знаю, что массивы, из которых поступают данные, прекрасны, и я думаю, что я настроил все прямо в раскадровке. Многие аналогичные вопросы уже были опубликованы по этому вопросу, но все они, похоже, дошли до того, чтобы забыть установить cellStyle в .subtitle. Заранее спасибо за любую помощь, которую я получаю!

BTW. Мои обычные названия ячеек работают так, как я их хочу. Нет проблем.

ответ

1

В вашем первом разделе инструкция охраны возвращается, прежде чем вы установите текст и текст детали ячейки. Если вы сменили его на:

if let latestCell = tableView.dequeueReusableCell(withIdentifier: "latestCell") { 
    cell = latestCell    
} else { 
    cell = UITableViewCell(style: .subtitle, reuseIdentifier: "latestCell") 
}    
cell.textLabel?.text = latest[indexPath.row] 

cell.detailTextLabel?.text = latestSub[indexPath.row] 

cell.accessoryType = .disclosureIndicator 

return cell 

Теперь эти ярлыки будут установлены.

И ваша авария вызвана следующим образом:

return cell! 

Если ячейка == ноль, то клетки! попытается развернуть его. И действительно, что вы должны делать, это вызов супер-реализации:

return super.tableView(tableView, cellForRowAt: indexPath) 

Удачи.

+0

Я не смог вернуть super.tableview, Xcode не позволит. Кроме этого, я изменил код, и он по-прежнему не показывает субтитры, но он тоже не сбой. Спасибо, что ответили! – Tuomax

+0

У вас есть что добавить или другое решение? – Tuomax

+0

Жаль, что не вернулась раньше. Похоже, что он должен работать - возможно, установите точку останова после 'cell.detailTextLabel? .text = latestSub [indexPath.row]', а затем введите 'p cell.detailTextLabel? .text' в lldb, чтобы узнать, правильно ли он установлен правильно. Пока вы на нем набираете 'p latestSub [indexPath.row]', чтобы узнать, правильно ли заполнен ваш массив. – joeybladb

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