Хочу поделиться с сообществом одной мыслью. Суть в следующем: иногда нужно создать простой 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 запрашивает (через блок) создание необходимого количества ячеек, а так же обработку этих ячеек. Удобство в том, что мы пишем меньше кода.

Что скажите, сообщество? Стоит ли развивать? Удобно ли, по вашему мнению, будет пользоваться?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *