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
目标存储在一个数组中,该数组按顺序访问,如果控制事件按照它们创建的顺序满足,则会触发。
如果您查看 UIControl
(UIButton
的超类)的头文件,您将看到 NSMutableArray* _targetActions
是一个数组。因此,除非您在某个时间点创建此数组后重新排序该数组,否则该订单保证会像这样触发。
【讨论】:
以上是关于iPhone:IBAction 与选择器的主要内容,如果未能解决你的问题,请参考以下文章
无法识别的选择器 NSInvalidArgumentException:对于 IBAction?