iPhone:IBAction vs Selector

时间:2012-01-04 10:53:33

标签: iphone

我有一个有IBAction的Button1。我还为我的按钮

设置了目标和操作
- (void)setTarget:(id)target action:(SEL)action {
  [self.Button1 addTarget:target action:action 
       forControlEvents:UIControlEventTouchUpInside];
}

所以当我按下按钮时,IBAction首先做了他应该做的事,而不是我设置按钮的动作。这个订单总是这样吗?

1 个答案:

答案 0 :(得分:3)

如果你正在加载你从nib文件中查看或查看控制器,那么模式将永远是IBAction甚至首先是你添加到按钮的目标。

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

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