2010-03-27 33 views
10

如何判断UITableViewCell内部的UISwitch已被点击?如何判断UITableViewCell内部的UISwitch何时被点击?

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



} 

打开开关是不是一个问题。现在的问题是,当UISwitch设置为OFF时,出于某种原因,它的动作会被调用两次(并且我可以获得2个NSLogs一次)。



为什么越来越行动调用两次只有一个水龙头关闭开关?我如何解决它?

回答

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

谢谢。我没有使用标签属性,而是为每个交换机创建了一个特定的操作(switchToggled1,switchToggled2)。但是有一个问题:当我点击开关一次,由于某种原因,这个动作被调用两次。为什么会被调用两次? (更新:关闭开关将调用动作两次,将开关打开只调用一次动作) – RexOnRoids 2010-03-27 08:08:48

+0

这应该是上面示例代码中的@selector NOT @selection。这花了我大约半小时的时间才弄清楚。 – 2010-04-05 12:40:25

+0

@Chuck哎呀!对于那个很抱歉。这是在浏览器中输入代码的缺点...... – 2010-04-05 15:33:58

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

这是否得到解决?我发现在'switchChanged:'方法末尾有一个'[table reloadData]'触发了我的'switchChanged:'方法两次。 – 2011-12-29 11:30:06

11

用于具有多点触摸麻烦的人有你试图改变控制事件UIControlEventValueChanged

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

我不会有麻烦这样。

+0

您可能还想在'@ selector'中使用'valueChanged:'。 – 2012-07-19 11:04:19

相关问题