使用单个IBAction方法处理多个UISwitch

时间:2012-10-05 23:01:10

标签: ios uiswitch

我有以下IBAction链接到我的应用程序中的几个开关。我想弄清楚点击了哪个开关。每个UISwitch都有一个特定的名称。我想要这个名字。

- (IBAction)valueChanged:(UISwitch *)theSwitch { //Get name of switch and do something... }

4 个答案:

答案 0 :(得分:2)

您可以使用标签:

创建开关时,需要设置标签。

- (IBAction)valueChanged:(UISwitch *)theSwitch { 
    switch(theSwitch.tag){
        case 0:
        {
            //things to be done when the switch with tag 0 changes value
        }
        break;
        case 1:
        {
            //things to be done when the switch with tag 0 changes value
        }
        break;
        // ...
        default:
        break;
    }
}

或者检查开关是否是您的控制器属性之一

- (IBAction)valueChanged:(UISwitch *)theSwitch { 
    if(theSwitch == self.switch1){
        //things to be done when the switch1 changes value
    } else if (theSwitch == self.switch2) {
        //things to be done when the switch2 changes value
    }// test all the cases you have
}

答案 1 :(得分:1)

IBAction将指针传递给执行操作的开关。你可以从中获得任何财产。

比较开关:

- (void)valueChanged:(UISwitch *)theSwitch {

    if ([theSwitch isEqual:self.switch1]) {
        NSLog(@"The first switch was toggled!");
    }
    else if ([theSwitch isEqual:self.switch2]) {
        NSLog(@"The second switch was toggled!");
    }
    else {
        NSLog(@"Some other switch was toggled!");
    }
}

答案 2 :(得分:0)

我不,谢谢你可以得到那个开关的名字。您可以标记每个开关,并使用该标签确定开关的名称。

答案 3 :(得分:0)

UISwitch没有name属性。但是您可以将其子类化并向子类添加name属性。然后从子类而不是UISwitch创建开关,并在初始化时为它们命名。

@class MySwitch : UISwitch
@property (nonatomic, retain) NSString* name;
@end

然后事件处理程序可以访问它们的名称字符串:

- (IBAction)valueChanged:(MySwitch *)theSwitch { 
    NSLog(@"switch %@ value changed", theSwitch.name);
}

但我认为更好的答案是使用已存在的标记字段并使用整数标记来识别开关而不是字符串。您可以在代码中创建枚举常量来命名标记值:

enum { SomeSwitch = 1, AnotherSwitch = 2, MainSwitch = 3 } _SwitchTags;

最好的答案是@Moxy提到将开关的指针与控制器的属性进行比较,以确定哪个开关发生了变化。这就是我在代码中所做的。从长远来看,标签和名称容易出错。