Как узнать, когда UISwitch внутри UITableViewCell был использован?
Как узнать, когда был использован t UISwitch
внутри UITableViewCell
?
My UISwitch
настроен внутри ячейки (generic cell) следующим образом:
UISwitch *mySwitch = [[[UISwitch alloc] initWithFrame:CGRectZero] autorelease];
[cell addSubview:mySwitch];
cell.accessoryView = mySwitch;
И я пытаюсь обнаружить такой крафт (но его не работает):
- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath {
NSUserDefaults *prefs;
if(indexPath.section == 1){
switch(indexPath.row)
{
case 0:
NSLog(@"Tapped Login Switch");
break;
default:
break;
}
}
}
Dave DeLong предложил, чтобы я установил действие для каждого коммутатора в качестве решения. Поэтому я установил переключатель:
UISwitch *mySwitch = [[[UISwitch alloc] initWithFrame:CGRectZero] autorelease];
[mySwitch addTarget:self action:@selector(switchToggled2:) forControlEvents: UIControlEventTouchUpInside];
if(at_songs){
[mySwitch setOn:YES animated:NO];
}
[cell addSubview:mySwitch];
cell.accessoryView = mySwitch;
И следующее, чтобы узнать, когда он был использован:
-(IBAction)switchToggled1:(id)sender {
NSUserDefaults *prefs;
NSLog(@"Tapped Login Switch");
prefs = [NSUserDefaults standardUserDefaults];
if(at_login){
[prefs setObject:@"NO" forKey:@"autotweet_login"];
at_login = NO;
}else{
[prefs setObject:@"YES" forKey:@"autotweet_login"];
at_login = YES;
}
}
Включение выключателя не является проблемой. Проблема СЕЙЧАС заключается в том, что когда UISwitch установлен в OFF, по какой-то причине его действие вызывается дважды (и я получаю 2 NSLogs для 1 нажатия).
Почему действие получило название TWICE только для одного нажатия, чтобы выключить переключатель? Как это исправить?
Ответы
Ответ 1
Дайте переключателю цель и действие:
[mySwitch addTarget:self action:@selector(switchToggled:) forControlEvents: UIControlEventTouchUpInside];
Затем выполните свой метод switchToggled::
- (void) switchToggled:(id)sender {
//a switch was toggled.
//maybe use it tag property to figure out which one
}
Ответ 2
для людей, имеющих проблемы с несколькими касаниями, вы попытались изменить событие управления на UIControlEventValueChanged
[catSwitch addTarget:self action:@selector(catSwitched:) forControlEvents: UIControlEventValueChanged];
У меня нет проблем таким образом.
Ответ 3
Разве это разрешено, почему switchToggled называется TWICE? Случилось и со мной. Его регистрация NSLog дважды. Но в моем случае это случайное. Иногда в выключенном состоянии он вызывается дважды, а иногда и включен. Прикрепление журнала
2010-08-17 18:12:30.264 SimplyPersonnelV1[3190:207] Auto Login turned on
2010-08-17 18:12:33.032 SimplyPersonnelV1[3190:207] Auto Login turned off
2010-08-17 18:12:33.032 SimplyPersonnelV1[3190:207] Auto Login turned off
2010-08-17 18:12:33.760 SimplyPersonnelV1[3190:207] Auto Login turned on
2010-08-17 18:12:46.223 SimplyPersonnelV1[3190:207] Auto Login turned off
2010-08-17 18:12:47.383 SimplyPersonnelV1[3190:207] Auto Login turned on
2010-08-17 18:12:48.000 SimplyPersonnelV1[3190:207] Auto Login turned off
2010-08-17 18:12:48.623 SimplyPersonnelV1[3190:207] Auto Login turned on
2010-08-17 18:12:49.176 SimplyPersonnelV1[3190:207] Auto Login turned off
2010-08-17 18:12:59.687 SimplyPersonnelV1[3190:207] Auto Login turned on
2010-08-17 18:12:59.688 SimplyPersonnelV1[3190:207] Auto Login turned on
2010-08-17 18:13:00.246 SimplyPersonnelV1[3190:207] Auto Login turned off
2010-08-17 18:13:00.759 SimplyPersonnelV1[3190:207] Auto Login turned on
2010-08-17 18:13:00.759 SimplyPersonnelV1[3190:207] Auto Login turned on
2010-08-17 18:13:05.638 SimplyPersonnelV1[3190:207] Auto Login turned off
2010-08-17 18:13:06.391 SimplyPersonnelV1[3190:207] Auto Login turned on
2010-08-17 18:13:06.391 SimplyPersonnelV1[3190:207] Auto Login turned on
2010-08-17 18:13:07.078 SimplyPersonnelV1[3190:207] Auto Login turned off
2010-08-17 18:13:07.830 SimplyPersonnelV1[3190:207] Auto Login turned on
2010-08-17 18:13:07.830 SimplyPersonnelV1[3190:207] Auto Login turned on
2010-08-17 18:13:08.622 SimplyPersonnelV1[3190:207] Auto Login turned off
2010-08-17 18:13:09.261 SimplyPersonnelV1[3190:207] Auto Login turned on
2010-08-17 18:13:09.262 SimplyPersonnelV1[3190:207] Auto Login turned on
2010-08-17 18:13:15.565 SimplyPersonnelV1[3190:207] Auto Login turned off
2010-08-17 18:13:16.485 SimplyPersonnelV1[3190:207] Auto Login turned on
2010-08-17 18:13:16.486 SimplyPersonnelV1[3190:207] Auto Login turned on