Я пытаюсь создать UITableView с обычными, нестандартными ячейками .subtitle
в чистом коде. Однако следующий код никогда не дает мне ячейку с правильным detailTextLabel
, вместо этого выбирая ячейку .default
.
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
}
Очевидно, это связано с тем, что dequeueReusableCell(withIdentifier:)
на самом деле не возвращает nil
, даже если в данный момент нет доступных ячеек. Вместо этого он всегда возвращает .default
, если не было создано ни одной ячейки.
Другой вариант, dequeueReusableCell(withIdentifier:for:)
, также всегда успешен, так что это тоже не сработает.
До сих пор кажется невозможным создать ячейку в стиле, отличном от .default
, в чистом коде без Interface Builder, определяющего стиль ячейки-прототипа. Самое близкое, что я могу придумать, это ответ, который замечает ту же проблему. Все остальные вопросы, которые я нашел, также касаются либо проблем с IB, либо пользовательских ячеек.
Кто-нибудь знает, как убрать из очереди ячейку .subtitle
для табличного представления без использования Interface Builder?
func register(_ cellClass: AnyClass?, forCellReuseIdentifier identifier: String)
- person Mat   schedule 12.01.2017