Хочу поделиться с сообществом одной мыслью. Суть в следующем: иногда нужно создать простой UITableView с однотипными ячейками, который будет отображать в себе какую-либо коллекцию. Можно использовать стандартный подход с UITableViewDelegate и UITableViewDataSource. Но всегда хочется чтобы было быстрее и удобнее.
Исходя из выше сказанного мне захотелось упростить эту процедуру. Я решил заменить вызовы методов UITableViewDataSource на блоки. Например:
-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
Я заменил на вот такой блок:
^(UITableViewCell* cell, NSIndexPath* indexPath, id item){ // код обработки ячейки }
Так же добавил блок для создания ячейки:
^UITableViewCell *{ // создаем ячейку }
Использовать можно вот так:
BlockTableView* blockTableView = [[BlockTableView alloc] init];// назначаем коллекцию для отображения NSArray* someCollection = ...; [blockTableView setCollection:someCollection];
// создание ячейки [blockTableView setCreateCellBlock:^UITableViewCell *{ UITableViewCell* cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"cellId"];
return [cell autorelease]; }]; // обработка ячейки (наполнение данными) [blockTableView setPrepareCellBlock:^(UITableViewCell* cell, NSIndexPath* indexPath, id item){ CollectionItem* collectionItem = (CollectionItem *)item;
cell.textLabel.text = collectionItem.title; cell.detailTextLabel.text = collectionItem.description; }];
Тут BlockTableView — собственно наша обертка над UITableView. CollectionItem — какая-либо сущность (элемент коллекции, экземпляр класса).
В данном примере мы задаем коллекцию для отображения, затем BlockTableView запрашивает (через блок) создание необходимого количества ячеек, а так же обработку этих ячеек. Удобство в том, что мы пишем меньше кода.
Что скажите, сообщество? Стоит ли развивать? Удобно ли, по вашему мнению, будет пользоваться?
Сообщить об опечатке
Текст, который будет отправлен нашим редакторам: