Можно ли использовать одну прототипную ячейку в нескольких таблицах?
У меня есть два разных табличных представления в двух разных контроллерах. Но ячейки, которые мне нужно отображать в них, выглядят одинаково. Я создал прототип ячейки в одном tableView и подклассе UiTableViewCell. Теперь, если я хочу использовать одну и ту же ячейку в другом контроллере, как я могу ее использовать?
Если я просто импортирую этот файл customCell в новый контроллер и деактивирую его, используя тот же идентификатор, указанный в раскадровке, он не будет работать. В нем говорится:
Ошибка подтверждения в - [UITableView _configureCellForDisplay: forIndexPath:]
Завершение приложения из-за неперехваченного исключения "NSInternalInconsistencyException", причина: "UITableView dataSource должен вернуть ячейку из tableView: cellForRowAtIndexPath: '
Значит, это означает, что ячейка равна нулю. Итак, как я могу создать экземпляр одной ячейки из раскадровки? Возможно ли это, или мне нужно создать другой customCell для новой таблицы?
Ответы
Ответ 1
K.. Я понял. Прежде всего,
Я не могу использовать одну прототипную ячейку в двух разных таблицах. Но я может использовать один и тот же подкласс TableViewCell в двух разных табличных представлениях.
Чтобы достичь этого, нужно просто скопировать ячейку прототипа с одного контроллера и вставить ее в качестве ячейки прототипа другого tableview. Класс вставного стола остается тем же. Просто измените параметр reuseIdentifier. и использовать его.
Изменить:
Если ваша ячейка имеет довольно сложный интерфейс, тогда имеет смысл создавать отдельный xib для одной ячейки. Затем программно зарегистрировать xib в виде таблицы. Таким образом, у вас будет только одна копия ячейки и намного лучше ее поддерживать, когда есть изменения в ui.
Ответ 2
Вы можете использовать одну и ту же ячейку прототипа в разных контроллерах представлений, вам просто нужно удалить ее из таблицы просмотра контроллера, в которой вы ее создали.
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let viewControllerInWhichCellWasDefined = tabBarController?.viewControllers?[0]
let cell = viewControllerInWhichCellWasDefined.tableView.dequeueReusableCell(withIdentifier: "identifier", for: indexPath)
return cell
}
Ответ 3
Если вы создаете пользовательскую ячейку в XIB, она должна работать нормально. Тем не менее, я подозреваю, что эта ячейка identifier
вызвала проблему. Попробуйте изменить идентификатор вашей ячейки для каждого контроллера табличного представления.
Если это не так, вы можете отправить исходный код
Ответ 4
Я использовал тот же UITableViewCell в разных приложениях. просто скопируйте один TableViewCell в другое приложение. То есть оба приложения имеют одинаковый макет и т.д. Приложения не принадлежат к одному рабочему пространству. Настройка работает хорошо, никаких проблем или ошибок.. просто не знаю, если это хорошая практика.