当从同一个组件调用时,两个 IBAction 触发的顺序是啥?

Posted

技术标签:

【中文标题】当从同一个组件调用时,两个 IBAction 触发的顺序是啥?【英文标题】:What order do two IBActions fire when called from the same component?当从同一个组件调用时,两个 IBAction 触发的顺序是什么? 【发布时间】:2013-06-06 00:10:34 【问题描述】:

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

无论我如何尝试,我似乎都无法更改动作触发的顺序。有没有办法让我决定这个,还是随机的?

IBActions 从同一个组件中被触发的顺序是什么?有没有办法按一定的顺序调用它们?

【问题讨论】:

【参考方案1】:

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

【讨论】:

可能是场景中两个不同的 NSObject 上的动作。【参考方案2】:

这个问题的答案很简单,只是有点奇怪。 IBAction 按字母顺序调用。请参阅下面的示例。

下面是 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 生成显示的日志。即使您重新排列 IBAction 或以不同方式链接它们,也会生成相同的日志。

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

希望这对人们有所帮助。它让我难过的时间最长。

【讨论】:

酷,不知道这个!但是,我认为亚历克斯上面的回答是你要走的路! @Filip 是的,我确实相信那将是最好的方法,但是,我想分享我今天学到的东西。 :) 虽然这是一个有趣的发现,但请不要依赖于此。这是一个未记录的实现细节,可能会发生变化。【参考方案3】:

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

【讨论】:

@HenryHarris 这没有错。仅仅因为当前实现似乎按字母顺序调用选择器并不意味着您应该依赖这种行为。正如“darrensi”所说,它没有记录,它可能会改变。永远不要依赖未记录的实现细节。 这不是答案,也没有帮助。

以上是关于当从同一个组件调用时,两个 IBAction 触发的顺序是啥?的主要内容,如果未能解决你的问题,请参考以下文章

测试 React 组件方法正在调用函数传递作为道具

在代码中调用 IBAction 并发送标签

IBAction 的不同触摸状态

Vue多个路由共用同一组件时,互相切换时更新组件

当从输入框中删除最后一个字符时,事件未在剑道网格和角度 5 中触发?

当我添加 viewDidLoad 时 IBAction 不会触发