我是Objective-C& amp;的新手。 iOS编程让我对事件和动作处理非常困惑。我真的不明白将Interface builder中的按钮与其文件所有者方法连接有什么区别(例如用我的个人方法buttonClicked连接按钮操作),另一方面创建一个响应按钮事件的委托?我很困惑,因为我来自C#(.NET),你只能通过委托来处理事件。
答案 0 :(得分:1)
让我们首先以编程方式创建事件处理。一些假设......
MyViewController
myButton
(UIButton *
)第一步是创建处理按钮水龙头的方法:
-(void)onMyButtonTap:(UIButton *)sender {
// My button was tapped, whoa, which one is in sender argument
}
添加点击事件处理:
-(void)loadView {
[super loadView];
[self.myButton addTarget:self action:@selector(onMyButtonTap:) forControlEvents: UIControlEventTouchUpInside];
}
这段代码的作用是什么?在这种情况下,self
是MyViewController
类的实例,它将处理事件内部的修饰(addTarget
)。 action
是在UIControlEventTouchUpInside
触发时调用的方法。
因此addTarget:...
行添加了事件处理,当控制事件触发时,这......
[self onMyButtonTap:self.myButton];
...将自动调用。
这是简化的例子,它在现实世界中可能更复杂:
UIButton
分开UIView
(好的做法,我不喜欢人们把它们放进UIViewController
)sender
参数区分它们)现在回到网点。 Outlet只是addTarget:...
的自动粘合剂。
UIButton
是UIControl
的子类,在这里您可以看到如何处理其他事件以及您可以处理哪些事件。
代表团也是常见做法,但不适用于UIControl
。没有代表,等等。你必须这样做。
或者您可以通过块增强UIButton
来处理事件。这是https://gist.github.com/2468899的一种方式,或者谷歌可以提供更多信息。