Я пытаюсь создать UITableView с регулярными, нестандартными ячейками в чистом коде. Однако следующий код никогда не дает мне ячейку с надлежащим detailTextLabel
, вместо этого выбирает ячейку .default
.Как правильно деактивировать подзаголовок UITableViewCell в коде?
public var cellIdentifier: String { return "wordsCell" }
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell: UITableViewCell
if let newCell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier) {
// Always succeeds, so it never goes to the alternative.
cell = newCell
}
else {
// This is never reached.
cell = UITableViewCell(style: .subtitle, reuseIdentifier: cellIdentifier)
}
let word = wordAtIndexPath(indexPath: indexPath)
cell.textLabel?.text = word.text
cell.detailTextLabel?.text = word.subText
return cell
}
Это Apparantly потому dequeueReusableCell(withIdentifier:)
фактически не возвращать nil
, даже если клетка не в настоящее время. Вместо этого он всегда возвращает .default
, если ячейки не созданы.
Другой вариант, dequeueReusableCell(withIdentifier:for:)
также всегда преуспевает, так что это тоже не сработает.
Пока что невозможно создать ячейку стиля не .default
в чистом коде без интерфейса Builder для определения стиля ячейки прототипа. Самое близкое, что я могу придумать, - это answer, который замечает ту же проблему. Все остальные вопросы, которые я нашел, также касаются либо проблем IB, либо пользовательских ячеек.
Кто-нибудь знает, как удалить ячейку .subtitle
для просмотра таблицы без использования интерфейса Builder?
Вы можете поменять порядок условных выражений? – NRitH
@NRitH Наверное, нет, поскольку мы только хотим инициализировать новую ячейку, когда это необходимо. Если я поменяю условные обозначения, это будет всегда _ инициализировать новую ячейку. – SpacyRicochet
Можете ли вы объяснить, чего вы пытаетесь достичь? если в каком случае вы хотите получить субтитры? – mat