Если я добавлю элемент управления UISwitch в каждую из моих ячеек табличного представления, как я могу определить, к какой ячейке он принадлежит? - PullRequest
7 голосов
/ 12 августа 2010

У меня есть UITableView с ячейками, которые содержат UISwitch элемент управления.Это похоже на представление таблицы в приложении часов iPhone, показанном ниже ...

alt text http://epicself.com/wp-content/uploads/2009/04/1-1.jpg

В методе cellForRowAtIndexPath моего приложения я создаю и присоединяю элемент управления UISwitchвот так ...

 CGRect frameSwitch = CGRectMake(215.0, 10.0, 94.0, 27.0);
 UISwitch *switchEnabled = [[UISwitch alloc] initWithFrame:frameSwitch];
 [switchEnabled addTarget:self action:@selector(switchToggled:) forControlEvents:UIControlEventValueChanged];

 cell.accessoryView = switchEnabled;

Мой вопрос: когда переключатель переключается пользователем и вызывается метод switchToggled, как я могу определить, к какой ячейке таблицы он принадлежит?Я не могу ничего с этим поделать, не зная его контекста.

Большое спасибо заранее за вашу помощь!

Ответы [ 2 ]

9 голосов
/ 12 августа 2010

В вашем методе действия вы можете разыграть superview переданного UISwitch (который сам является UITableViewCell), а затем передать его методу tableView indexPathForCell.

indexPathForCell вернет объект NSIndexPath, который вы затем сможете использовать для индексации вашей модели данных для изменения.Тогда все, что вам нужно сделать, это вызвать reloadData на вашем tableView.

Кроме того, в cellForRowAtIndexPath вы должны установить состояние UISwitch на основе вашей модели.

9 голосов
/ 12 августа 2010

Прежде всего исправьте утечку памяти:

UISwitch *switchEnabled = [[[UISwitch alloc] initWithFrame:frameSwitch] autorelease];

Затем выберите один из следующих вариантов:

switchEnabled.tag = someInt; // before adding it to the cell

NSLog(@"switched %d",switch.tag); // to see which switch was toggled

или

UITableViewCell *parentCell = switchEnabled.superview;
// + some magic to see which cell this actually is
...