如何让UIButton一次做两件事?

时间:2015-03-15 23:48:20

标签: ios uibutton uikit

如何在按下时UIButton完成两个单独的方法?

1 个答案:

答案 0 :(得分:6)

如果您在Interface Builder(storyboard或xib)中设计视图控制器,我们可以将我们的按钮挂钩到任意数量的动作。

使用ctrl + drag方法,我们创建了一个方法来处理按下按钮:

enter image description here

我们可以根据需要将尽可能多的方法连接起来:

enter image description here

此处,此按钮连接到三种不同的方法。


我们可以通过编程方式在代码中执行相同的操作。

在斯威夫特:

myButton.addTarget(self, action: "methodOne:", forControlEvents:.TouchUpInside)
myButton.addTarget(self, action: "methodTwo:", forControlEvents:.TouchUpInside)
myButton.addTarget(self, action: "methodThree:", forControlEvents:.TouchUpInside)

或在Objective-C中:

[myButton addTarget:self 
             action:@selector(methodOne:) 
   forControlEvents:UIControlEventTouchUpInside];

[myButton addTarget:self 
             action:@selector(methodTwo:) 
   forControlEvents:UIControlEventTouchUpInside];

[myButton addTarget:self 
             action:@selector(methodThree:) 
   forControlEvents:UIControlEventTouchUpInside];

我们可以连接任意数量的事件。


作为最后一点,我不确定是否有任何方法可以实际控制直接连接到按钮的方法的顺序。在这种情况下,我按顺序将按钮连接到方法:onetwothree,但它们似乎以不同的顺序调用:onethreetwo。它们始终按此顺序调用。

如果订单实际上很重要,那么我们应该将我们的按钮连接到一个方法,然后以我们需要的显式顺序调用所有其他方法:

@IBAction func buttonPress(sender: AnyObject) {
    self.methodOne(sender)
    self.methodTwo(sender)
    self.methodThree(sender)
}

说实话,我说这应该是推荐的方法。它可能使源代码更容易阅读。