TableKit — удобная библиотека на основе UITableView

в 20:10, , рубрики: UITableView, UITableViewCell, разработка под iOS, метки: , ,

Вы еще не устали от UITableViewDataSource, cellForRowAtIndexPath, numberOfRowsInSection? Или вот еще dequeueReusableCellWithIdentifier?
Я понимаю что все это круто, но сколько можно уже писать один и тот же код!

А что если просто определить ячейки:

  TKCell* staticCell = [TKStaticCell cellWithText:@"Hello World!"];
  TKCell* textCell = [TKTextFieldCell cellWithText:@"Editing Text"];

сгруппировать их в секции:

  TKSection* section = [TKSection sectionWithCells:staticCell, textCell, nil];

и передать массив секций в таблицу:

  tvc = [[TKTableViewController alloc] initWithStyle:UITableViewStylePlain];
  tvc.sections = [NSArray arrayWithObjects:section1, section2, section3, nil];

Для начала неплохо, но это далеко не все.

Еще можно вот так:

  staticCell.tableViewCell.accessoryType = UITableViewCellAccessoryCheckmark;

вот так:

  staticCell.textLabel.font = [UIFont systemFontOfSize:20];
  textCell.textField.textColor = [UIColor redColor];

и даже вот так:

  textCell.textField.delegate = self;

Но как это возможно!?
Есть два варианта: либо в классе ячейки хранятся ссылки на все контролы, либо магия. Вариант со ссылками может оказаться ресурсоемким, да и заведомо ограничен конечным набором возможностей, чего не скажешь про магию! На самом деле, каждая ячейка предоставляет прокси-интерфейсы для всех своих контролов. Каждое обращение через такой интерфейс к сеттеру контрола сохраняется в специальном массиве атрибутов ячейки. Список атрибутов в дальнейшем будет применен к каждой вьюшке соответствующей ячейки.

Атрибуты дают возможность сделать точную настройку существующей ячейки, но злоупотреблять ими не стоит. Зачем загромождать код, лучше создать кастомную ячейку под конкретные требования.

TableKit спроектирована таким образом, чтобы было удобно дописывать свои расширения.
Модель данных представлена двумя базовыми классами: TKSection и TKCell. А для отображения ячейки используется стандартный UITableViewCell, объект которого можно запросить у «темы», определенной для конкретного экземпляра UITableView. Тема — это своего рода фабрика вьюшек для ячеек. Начиная новый проект, один раз определите тему с ячейками, и в дальнейшем получайте удовольствие от каждого экрана с таблицей.

TableKit предлагает паттерн, но не навязывает реализацию. Если вам что-то не подходит — не используйте. Можно не пользоваться атрибутами, не определять темы, не создавать классы вьюшек, можно отказаться от моделей ячеек и секций и вручную определить источник данных в своем контроллере. Либо наоборот, расширить возможности TableKit переопределив традиционные методы. Библиотека предназначена не ограничивать, только расширять возможности.

Для дальнейшего развития проекта, не хватает коммунити со своими пожеланиями, предложениями, критикой и баг-репортами.

На момент написания статьи библиотеку оценило считанное число людей, но верю, TableKit станет стандартом де-факто в своей области.
Страница проекта на githab

Автор: onegray

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js