Простое и безопасное создание UITableViewCell

П

Было бы очень здорово найти решение, позволяющее уйти от привычного всем, но громоздкого способа создания UITableViewCell в UITableView, уйти от постоянного использования идентификаторов ячеек при их создании. Ведь с таким громоздким подходом очень просто наделать ошибок, и этот стандартный путь явно идет вразрез с простотой Swift.

Мы можем, допустим, просто использовать имя класса ячейки в качестве ее идентификатора переиспользования (reuse identifier) по умолчанию. Можно создать протокол ReusableViewProtocol, который отвечает за предоставление идентификаторов ячеек.

Когда мы заставляем UITableViewCell соответствовать протоколу DequeuableProtocol, мы получаем уникальный reusable identifier для каждой ячейки подкласса UITableViewCell.

Как правило, вам не нужно реализовывать dequeueIdentifier. Реализация по умолчанию возвратит имя класса ячейки как идентификатор.

Еще одно свойство — dequeueNibName. Если ваша ячейка определяется внутри бандла (а не как прототип ячейки в Storyboard), вы можете зарегистрировать ее в table и использовать.

Заключительная часть этого трюка заключается в обеспечении регистрации dequeue-функции внутри table (такую же технику вы можете использовать и в collectionView).

Теперь, если ваша ячейка определяется внутри Storyboard, вы можете просто вызвать:

Если же ваша ячейка находится внутри Xib:

С таким подходом вы сможете получить только строго типизированный экземпляр ячейки очень просто.

Кстати, раз уж мы пошли в тему упрощения работы с UITableView: у нас есть очень неплохой трюк о том, как вынести UITableViewDataSource в отдельный файл и сильно разгрузить код!

Поддержите ресурс blog.justDev:

Сведения об авторе

Игорь Малеваный

1 комментарий

  • Нормальные люди такой код в свое приложение не вставят. А если кто-то вставит такое в мое приложение — оторву руки, пусть пришьет в нормальное место.

    Есть такая вещь как DataDisplayManager, который и нужно использовать для таких вещей.
    Там нет шаблонов (а значит — нет разбухания кода). И есть все нужное для проброса selector’ом owner’у.

Instagram

Поддержите ресурс blog.justDev:

Свежие записи

Рубрики