2010-03-27 14 views
10

UITableViewCell'un içine bir UISwitch içeriğinin nasıl yapıştırıldığını nasıl anlarsınız?Bir UITwitch'in bir UITableViewCell içine ne zaman eklendiğini nasıl anlarsınız?

Benim UISwitch böyle hücresi (jenerik hücrenin) içinde kurulur:

UISwitch *mySwitch = [[[UISwitch alloc] initWithFrame:CGRectZero] autorelease]; 
[cell addSubview:mySwitch]; 
cell.accessoryView = mySwitch; 

Ve böyle bir musluk algılamaya çalışıyorum (ama çalışmıyor onun):

- (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 her anahtar için bir çözüm olarak bir eylem belirlediğimi önerdi. Bir sorun

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



} 

anahtarı AÇIK Torna değildir:

 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; 



Ve aday zaman bilmek için aşağıdaki: Ben anahtarını ayarlamak için aşağıdaki yaptı. ŞİMDİ sorunu, UISwitch KAPALI olarak ayarlandığında, bir nedenden dolayı, eylemin iki kez çağrılmasıdır (Ve 1 musluk için 2 NSLog aldım).



eylem anahtar off konumuna yalnızca tek bir dokunuşla için İKİ KEZ adlandırılan oluyor Neden ? Nasıl düzeltebilirim?

cevap

12

Düğmeyi bir hedef ve işlem sunun:

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

Sonra switchToggled uygulamak: yöntemini:

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

Teşekkürler. Etiket özelliğini kullanmak yerine, her bir anahtar için belirli bir eylem (switchToggled1, switchToggled2) oluşturdum. Ama bir sorun var: Düğmeye bir kez dokunduğumda, bir sebepten dolayı eylem iki kez çağrılır. Neden iki kez çağrılmalı? (GÜNCELLEME: Anahtarın KAPALI konuma getirilmesi, eylemi iki kez çağırır, AÇIK konuma getirildiğinde, eylem sadece bir kez çağırılır) – RexOnRoids

+0

Yukarıdaki örnek kodda @selector NOT @selection olmalıdır. Bu bana zamanın yaklaşık yarım saatini anladım. –

+0

@Chuck whoops! bunun için üzgünüm. Bu, bir tarayıcıda kod yazmanın olumsuz tarafıdır ... –

1

switchToggled İKİ KEZ denir neden çözüldü mü? Bana da oluyor. NSLog’u iki kez kaydetti. Ama benim durumumda rastgele. Bazen KAPALI'ya iki kez denir ve bazen AÇIK olur. insanlar birden dokunuşları ile sorun yaşıyorsanız için günlüğü

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

Bu hiç çözülmedi mi? 'SwitchChanged:' yönteminin sonunda '[table reloadData]' olması, 'switchChanged:' yöntemini iki kez tetikledi. –

11

ekleme Eğer UIControlEventValueChanged

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

Ben sorunlarım bu şekilde sahip değilim kontrol olayı değiştirmeyi denedim var.

+0

Ayrıca, '@ selektör'de' valueChanged: 'işlevini de kullanmak isteyebilirsiniz. –

İlgili konular