В моем приложении у меня есть пользовательский подкласс 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 блок для выполнения при выборе, потому что я знаю, что блоки могут быть определены с определенными параметрами. Кроме того, нет необходимости передавать «целевой» объект.
Так как же мне это сделать?
Спасибо!