У меня есть UITableView
с ячейками, содержащими элемент управления UISwitch
. Это похоже на представление таблицы в приложении «Часы» на iPhone, показанном ниже ...
(источник: epicself.com )
В методе 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
, как я могу определить, какая ячейка таблицы это принадлежит? Я не могу ничего с этим поделать, не зная его контекста.
Заранее большое спасибо за вашу помощь!
В своем методе действия вы можете преобразовать супервизор
переданного UISwitch
(который является самим UITableViewCell
), а затем передать его в Метод tableView
indexPathForCell
.
indexPathForCell
вернет объект NSIndexPath
, который вы затем можете использовать для индексации вашей модели данных для изменения. Затем все, что вам нужно сделать, это вызвать reloadData
в вашем tableView
.
Кроме того, в cellForRowAtIndexPath
вы должны установить состояние UISwitch
на основе вашей модели.
Прежде всего, исправьте утечку памяти:
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