0

我是 Objective-C 和 iOS 编程的新手,所以我对事件和动作处理非常困惑。我真的不明白将 Interface builder 中的按钮与其文件所有者方法连接(例如,使用我的个人方法 buttonClicked 连接按钮操作)与另一方面创建将响应按钮事件的委托之间有什么区别?我很困惑,因为我来自 C# (.NET),而你只通过委托处理事件。

4

1 回答 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)内部的修饰。actionUIControlEventTouchUpInside触发时调用的方法。

因此,该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 回答