Цель C - Как реализовать собственный метод обратного вызова, но применить определенный параметр?

В моем приложении у меня есть пользовательский подкласс UITableViewCell, который при нажатии вызывает всплывающее окно выбора. с этого момента я буду называть этот класс PickerCell. Я использую несколько экземпляров PickerCell в одном и том же UITableView.

Я не хочу, чтобы ячейка реагировала на выбор строки в средстве выбора, потому что это не очень хороший MVC. Вместо этого я хочу, чтобы ViewController давал ячейке обратный вызов, который будет вызываться при выборе строки.

Самый очевидный способ — создать протокол наподобие PickerCellDelegate, и контроллер представления будет передавать себя каждой ячейке.

Моя проблема с этим подходом заключается в том, что, поскольку у меня есть несколько PickerCells, моя реализация протокола в ViewController должна различать каждую ячейку:

-(void) pickerCell : (PickerCell *) sender 
      didSelectRow : (NSInteger) row 
       inComponent : (NSInteger) component
{
    if (sender == X)
    // Something
    else if (sender == Y)
    // Something else...
    // etc...
}

И Я ненавижу этот стиль кодирования...

Вместо этого мне бы очень хотелось механизм, который позволяет ViewController давать свой собственный обратный вызов.

Я могу разрешить PickerCell принимать " onRowSelectedSelector", но как тогда убедиться, что этот селектор находится в нужном мне формате? (Количество параметров является наиболее важным)

Еще лучше, я хотел бы дать ячейке Picker блок для выполнения при выборе, потому что я знаю, что блоки могут быть определены с определенными параметрами. Кроме того, нет необходимости передавать «целевой» объект.

Так как же мне это сделать?

Спасибо!

19
задан Avi Shukron 28 March 2012 в 08:12
поделиться