从同一组件调用时,两个IBActions会触发什么顺序?

时间:2013-06-06 00:10:34

标签: ios objective-c uibutton components ibaction

我有一个UIButton,我试图从一个UIButton事件中调用两个不同的动作,因为该按钮需要做两件事,但我需要按照一定的顺序进行。

无论我如何尝试,我似乎无法改变动作触发的顺序。我有办法决定这一点,还是随意的?

IBActions从同一个组件中以什么顺序触发?有没有办法以某种顺序打电话给他们?

3 个答案:

答案 0 :(得分:7)

为什么不创建一个由按钮调用的新方法,并按照您想要的方式运行现有方法?

答案 1 :(得分:2)

答案很简单,都有点奇怪。 IBActions按字母顺序调用。请参阅下面的示例。

以下是6种IBAction方法,它们都打印出它们的方法。

.h 文件中...

- (IBAction)a:(id)sender;
- (IBAction)b:(id)sender;
- (IBAction)c:(id)sender;
- (IBAction)d:(id)sender;

.m 文件中......

- (IBAction)a:(id)sender {
   NSLog(@"a");
}
- (IBAction)b:(id)sender {
   NSLog(@"b");
}
- (IBAction)c:(id)sender {
   NSLog(@"c");
}
- (IBAction)d:(id)sender {
   NSLog(@"d");
}

当我点击链接到所有这些按钮时,我得到以下日志...

2013-06-05 18:06:52.637 TestIBAction[49798:c07] a
2013-06-05 18:06:52.637 TestIBAction[49798:c07] b
2013-06-05 18:06:52.637 TestIBAction[49798:c07] c
2013-06-05 18:06:52.637 TestIBAction[49798:c07] d

如果你按照字母顺序查看它们,它们会被解雇如下; a, b, b, d, e, f生成显示的日志。即使您重新安排了IBActions或以不同方式链接它们,也会生成相同的日志。

这个问题的简单答案是在方法名称之前添加字母,例如aOne, bTwo, cThree,然后按顺序调用它们,而如果你将它们留下One, Two, Three,它们将被称为{ {1}}由于这个字母顺序。

希望这有助于人们。这让我难以忍受了最长时间。

答案 2 :(得分:-1)

订单是不确定的,您不应该依赖订单,因为它可能会在未来的操作系统更新中发生变化。