当只设置一个IBAction时,如何识别代码中的UISwitch实例?

时间:2012-01-24 16:20:46

标签: objective-c ios

假设您的故事板上放置了2个UISwitch个对象。它们中的每一个都可以处于开启或关闭状态。

enter image description here

进一步假设IBAction设置为将故事板与代码链接:

- (IBAction)activityTurnedOn:(UISwitch*) activitySwitch;

问题: 有没有一种方法可以识别我在代码中使用的许多UISwitch个对象中的哪一个,哪一个只是打开或关闭?我可以通过Interface Builder分配一个属性,我可以在代码中测试吗?

4 个答案:

答案 0 :(得分:1)

是,在界面构建器中设置对象标签,然后您可以在代码中检索它:if (activitySwitch.tag == 1) ...

答案 1 :(得分:1)

我认为你不能为这些开关分配不同的插座。

  • (这不是黑客)你可以为每一个分配“tag”属性,并在activityTurnedOn:方法中检查它。
  • (这是一个黑客攻击)你也可以检查一些奇怪的参数,如开关的y位置。
  • (可能也是不可能)你可以创建UISwitch的几个子类并为交换机分配不同的类。

答案 2 :(得分:1)

您将每个开关都作为插座,然后检查activitySwitch ==您的插座变量。我发现这比使用标签更容易读取代码,并且您通常最终还是希望从其他地方更改交换机的状态,因此您最终需要插座。

答案 3 :(得分:0)

您可以在.h文件中分配2个IBOutlet,如下所示:

IBOutlet UISwitch *firstSwitch;
IBOutlet UISwitch *secondSwitch;

并在您的方法中执行此操作:

- (IBAction)activityTurnedOn:(UISwitch*) activitySwitch {
if (activitySwitch == firstSwitch) {

} else if (activitySwicth == secondSwitch) {

 }
}

或者您可以在nib文件中为开关指定标签(因为它们来自UIView)并且执行:

- (IBAction)activityTurnedOn:(UISwitch*) activitySwitch {
if (activitySwitch.tag == yourFirstSwitchTag) {

} else if (activitySwicth.tag == yourSecondSwitchTag) {

 }
}