我是 Objective-C 和 iOS 编程的新手,所以我对事件和动作处理非常困惑。我真的不明白将 Interface builder 中的按钮与其文件所有者方法连接(例如,使用我的个人方法 buttonClicked 连接按钮操作)与另一方面创建将响应按钮事件的委托之间有什么区别?我很困惑,因为我来自 C# (.NET),而你只通过委托处理事件。
问问题
157 次
1 回答
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
您可以在一种方法中处理多个按钮点击(通过参数区分它们)- 您可以创建更多的点击处理方法,一个按钮的一种方法,
- ...
现在回到奥特莱斯。插座只是一个自动胶水addTarget:...
。
UIButton
是的子类,UIControl
在这里您可以看到如何处理其他事件以及您可以处理哪些事件。
委托也是常见的做法,但不适用于UIControl
. 没有代表,等等。你必须这样做。
或者,您可以增强UIButton
以通过块处理事件,例如。这是一种方法https://gist.github.com/2468899或者您可以谷歌了解更多信息。
于 2012-07-24T12:03:04.857 回答