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

Rex*_*ids 10 iphone xcode uitableview uiswitch

如何判断一个UISwitch内部UITableViewCell是否被轻敲?

UISwitch是在单元格内设置的(通用单元格),如下所示:

UISwitch *mySwitch = [[[UISwitch alloc] initWithFrame:CGRectZero] autorelease];
[cell addSubview:mySwitch];
cell.accessoryView = mySwitch;
Run Code Online (Sandbox Code Playgroud)

我试图检测这样的水龙头(但它不起作用):

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

    }


}
Run Code Online (Sandbox Code Playgroud)

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;
Run Code Online (Sandbox Code Playgroud)



以下是知道它被点击的时间:

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



}
Run Code Online (Sandbox Code Playgroud)

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



为什么只有一个水龙头的动作被称为TWICE才能关闭开关?我如何解决它?

Dav*_*ong 12

为交换机提供目标和操作:

[mySwitch addTarget:self action:@selector(switchToggled:) forControlEvents: UIControlEventTouchUpInside];
Run Code Online (Sandbox Code Playgroud)

然后实现你的switchToggled:方法:

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


Gra*_*t M 11

对于多次触摸有问题的人,您尝试将控制事件更改为UIControlEventValueChanged

[catSwitch addTarget:self action:@selector(catSwitched:) forControlEvents: UIControlEventValueChanged];
Run Code Online (Sandbox Code Playgroud)

我没有这样的麻烦.