2015-10-09 3 views
0

В моем приложении iOS у меня есть UITableView, а в некоторых ячейках есть коммутатор.Слушайте пользовательские изменения состояния на коммутаторе iOS

Я поставил Слушатель на коммутаторе следующим образом:

[cell.toggle addTarget:self action:@selector(onSwitchToggle:) forControlEvents:UIControlEventValueChanged]; 

состояние переключателя можно также обновить из самой программы, а не только пользователем нажатием. Я испытываю некоторые проблемы с UIControlEventValueChanged, и иногда кажется, что он запускает больше событий, чем должен. Поэтому мне интересно, является ли это единственным способом прослушивания изменений состояния переключателя (пользователем) ...?

ответ

1

Я предполагаю, что вы устанавливаете addTarget внутри cellForRowAtIndexPath, и это ваша главная проблема.

Повторное использование ячеек (например, прокрутка) добавит эту цель в определенную ячейку несколько раз.

быстрое решение было бы изменить свой код на этот:

[cell.toggle removeTarget:nil 
        action:NULL 
     forControlEvents: UIControlEventValueChanged]; 
[cell.toggle addTarget:self action:@selector(onSwitchToggle:) forControlEvents:UIControlEventValueChanged]; 

Что будет в основном предотвратить цель добавить более чем один раз тумблер. Не самое красивое решение, но это то, что нужно учитывать.

Несколько лучше решения, что приходит на ум:

  • Добавить цель в сотовом подкласса под awakeFromNib.

  • Создайте эту ячейку в своем StoryBoard и установите для нее выходную розетку. Он будет инициализироваться только один раз.