iPhone:IBAction 与选择器

Posted

技术标签:

【中文标题】iPhone:IBAction 与选择器【英文标题】:iPhone: IBAction vs Selector 【发布时间】:2012-01-04 10:53:32 【问题描述】:

我有一个具有 IBAction 的 Button1。我还为我的按钮设置了目标和操作

- (void)setTarget:(id)target action:(SEL)action 
  [self.Button1 addTarget:target action:action 
       forControlEvents:UIControlEventTouchUpInside];

所以当我首先按下按钮时,IBAction 做了他应该做的,而不是我设置为按钮的操作。那个顺序总是这样吗?

【问题讨论】:

【参考方案1】:

如果您从 nib 文件加载视图或视图控制器,那么是的,该模式将始终是 IBAction,即使首先是您添加到按钮的目标。

实际上,在 Interface Builder 中添加 IBAction 实际上只是告诉 IB 调用 ["UIControl" addTarget:"id" forControlEvents:"UIControlEvent"],您可以将多个目标添加到 UIButton

实际上,您的代码将首先从 NIB 文件加载所有内容(如果您使用的是 initWithNib:named:),因此这将首先使用您在 Interface Builder 中指定的操作调用按钮上的 addTarget 函数,然后在稍后将调用您上面的setTarget 函数,这将为按钮添加另一个目标操作。 UIControls 目标存储在一个数组中,该数组按顺序访问,如果控制事件按照它们创建的顺序满足,则会触发。 如果您查看 UIControlUIButton 的超类)的头文件,您将看到 NSMutableArray* _targetActions 是一个数组。因此,除非您在某个时间点创建此数组后重新排序该数组,否则该订单保证会像这样触发。

【讨论】:

以上是关于iPhone:IBAction 与选择器的主要内容,如果未能解决你的问题,请参考以下文章

iPhone:日期选择器 dd/mm/yyyy

iPhone:“无法识别的选择器已发送到实例”错误

无法识别的选择器 NSInvalidArgumentException:对于 IBAction?

UIButton 的 IBAction 导致无法识别的选择器发送到实例错误 (iOS)

选择器视图约束 iphone4/iphone5

另一个“发送到实例的无法识别的选择器”