Подтвердить что ты не робот

Можно ли использовать одну прототипную ячейку в нескольких таблицах?

У меня есть два разных табличных представления в двух разных контроллерах. Но ячейки, которые мне нужно отображать в них, выглядят одинаково. Я создал прототип ячейки в одном tableView и подклассе UiTableViewCell. Теперь, если я хочу использовать одну и ту же ячейку в другом контроллере, как я могу ее использовать?

Если я просто импортирую этот файл customCell в новый контроллер и деактивирую его, используя тот же идентификатор, указанный в раскадровке, он не будет работать. В нем говорится:

Ошибка подтверждения в - [UITableView _configureCellForDisplay: forIndexPath:]

Завершение приложения из-за неперехваченного исключения "NSInternalInconsistencyException", причина: "UITableView dataSource должен вернуть ячейку из tableView: cellForRowAtIndexPath: '

Значит, это означает, что ячейка равна нулю. Итак, как я могу создать экземпляр одной ячейки из раскадровки? Возможно ли это, или мне нужно создать другой customCell для новой таблицы?

4b9b3361

Ответ 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 в другое приложение. То есть оба приложения имеют одинаковый макет и т.д. Приложения не принадлежат к одному рабочему пространству. Настройка работает хорошо, никаких проблем или ошибок.. просто не знаю, если это хорошая практика.