2010-03-27 3 views
10

Как узнать, когда был использован UISwitch внутри UITableViewCell?Как узнать, когда UISwitch внутри UITableViewCell был использован?

Мой UISwitch устанавливается внутри клетки (родовой клетки), как это:

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; 
    } 



} 

Включение переключателя ON не проблема. Проблема СЕЙЧАС заключается в том, что когда UISwitch установлен в OFF, по какой-то причине его действие вызывается дважды (и я получаю 2 NSLogs за 1 нажатие).



Почему действие вызывался ДВАЖДЫ только один кран, чтобы повернуть переключатель OFF? Как это исправить?

ответ

12

Дайте переключатель цели и действия:

[mySwitch addTarget:self action:@selector(switchToggled:) forControlEvents: UIControlEventTouchUpInside]; 

Затем реализовать switchToggled: метод:

- (void) switchToggled:(id)sender { 
    //a switch was toggled. 
    //maybe use it's tag property to figure out which one 
} 
+0

Спасибо. Вместо использования свойства tag я создал определенное действие (switchToggled1, switchToggled2) для каждого коммутатора. Но есть одна проблема: когда я нажимаю переключатель один раз, по какой-то причине действие вызывается дважды. Зачем это нужно дважды звонить? (ОБНОВЛЕНИЕ: включение выключателя ВЫКЛ вызывает действие дважды, включение выключателя ВКЛ вызывает действие только один раз) – RexOnRoids

+0

Это должно быть @selector NOT @selection в приведенном выше примере кода. Это стоило мне около получаса моего времени, чтобы разобраться. –

+0

@ Chuck возглашает! Извини за это. Это недостаток ввода кода в браузере ... –

1

в том, что решить, почему switchToggled называется ДВАЖДЫ? Случилось и со мной. Его регистрация 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 
+0

Это когда-нибудь решалось? Я узнал, что с '[table reloadData]' в конце метода 'switchChanged: 'дважды запускал мой метод« switchChanged: ». –

11

для людей, имеющих проблемы с несколькими касаниями вы пробовали изменения события управления для UIControlEventValueChanged

[catSwitch addTarget:self action:@selector(catSwitched:) forControlEvents: UIControlEventValueChanged]; 

Я не возникли проблемы таким образом.

+0

Вы также можете использовать 'valueChanged:' в '@ selector'. –

Смежные вопросы