2015-03-01 1 views
2

Я видел способ установки обработчика событий в пользовательских классах. Что-то вроде этого:iOS handle didSelectRowAtIndexPath в пользовательском классе

@implementation CustomClassWithTable { 
    void (^_cellHandler)(Cell *cell); 
} 

... 

- (void)setCellHandler:(void (^)(Cell *))handler 
{ 
    _cellHandler = handler; 
} 

... 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    ... 
    if (_cellHandler) { 
     _cellHandler(cell); 
    } 
} 

тогда в контроллере просто нужно установить cellHandler, и он работает. Мне это нравится. Прежде всего, что такое название этого подхода (образец)? Во-вторых, как я могу сделать это быстро? И это лучший aproach? Допустим, у меня есть таблица в моем пользовательском классе (меню), и я хочу, чтобы иметь возможность выбрать выделенную ячейку в моем контроллере просмотра. Должен ли я использовать этот aproach или что-то еще (например, шаблон делегата)?

ответ

1

Что вы делаете в приведенном выше коде, является делегирование с использованием объективного блока C. У Swift есть аналогичная функция, называемая замыканием. Поскольку этот блок имеет возможность делать ставки, установленные во время выполнения, вы также можете использовать шаблон стратегии для делегирования различного поведения при выборе строки таблицы.

var cellHandler : ((cell: Cell) -> Void)? 

if let callback = cellHandler { 
    callback(cell) 
} 
Смежные вопросы