2012-03-19 3 views
2

У меня есть табличное представление с пользовательскими UITableViewCells, каждая строка в таблице имеет индикатор UILabel, UISwitch и подробный раскрытие информации.Получение NSIndexPath строки для UISwitch

Я ищу лучший способ захвата UIControlEventChanged для коммутатора, но мне также нужен NSIndexPath коммутатора, который был изменен для обновления Core Data.

Я не хочу, чтобы UISwitch также являлся аксессуаром.

Я это прибегая к помощи в течение нескольких часов, и решение, которое держит выскакивают является использование

[switch addTarget:self action:@selector(switchTapped:) forControlEvents:UIControlEventChanged]; 

затем в switchTapped: метод использовать следующий, чтобы получить NSIndexPath

NSIndexPath *indexPath = [self.tableView indexPathForCell:(UITableViewCell *)[[sender superview] superview]]; 

ли есть лучший способ сделать это? У меня уже есть UITableViewCell подклассы, могу ли я поместить метод в этот класс, чтобы вернуть NSIndexPath для данного переключателя?

Заранее спасибо за любую помощь

+0

Кажется хорошим способом для меня. – wbyoung

+0

Но если иерархия представления изменена в любой момент, например, обновления iOS, это не удастся. –

+0

Хорошо, вы можете подойти и найти первый супервизор типа 'UITableViewCell'. Скорее всего, это провалится. – wbyoung

ответ

3

Я воспользуюсь еще одной возможностью для ссылки на мой ответ here - теги и ходьба иерархии представлений неудобны, подвержены ошибкам и ненужны, и я вижу, что они рекомендованы повсеместно в ответах SO. Вы можете найти индексный путь для любого элемента управления, используя его фрейм и метод таблицы indexPathForRowAtPoint:.

+0

спасибо за ваш ответ, это похоже на лучший подход. –

0

Настройки надлежащего тег для коммутатора в каждой строке таблицы является допустимым решением. Установите тег в соответствии с указателем в строке, в которой он присутствует.

Таким образом, вы избегаете возможных проблем, которые могут возникнуть при изменении иерархии представлений.

This почта может также вам помочь.