Objective-C解决事件和动作之间的区别

时间:2012-07-24 11:33:53

标签: objective-c events delegates

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

1 个答案:

答案 0 :(得分:1)

让我们首先以编程方式创建事件处理。一些假设......

  • 你上课MyViewController
  • 此类包含属性myButtonUIButton *
  • 您确实想要处理此课程中的活动

第一步是创建处理按钮水龙头的方法:

-(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];
}

这段代码的作用是什么?在这种情况下,selfMyViewController类的实例,它将处理事件内部的修饰(addTarget)。 action是在UIControlEventTouchUpInside触发时调用的方法。

因此addTarget:...行添加了事件处理,当控制事件触发时,这......

[self onMyButtonTap:self.myButton];

...将自动调用。

这是简化的例子,它在现实世界中可能更复杂:

  • 你可以UIButton分开UIView(好的做法,我不喜欢人们把它们放进UIViewController
  • 您可以在一种方法中处理多个按钮(通过sender参数区分它们)
  • 您可以创建更多点击处理方法,一个按钮的方法,
  • ...

现在回到网点。 Outlet只是addTarget:...的自动粘合剂。

UIButtonUIControl的子类,在这里您可以看到如何处理其他事件以及您可以处理哪些事件。

代表团也是常见做法,但不适用于UIControl。没有代表,等等。你必须这样做。

或者您可以通过块增强UIButton来处理事件。这是https://gist.github.com/2468899的一种方式,或者谷歌可以提供更多信息。