EventListener 1.1.1

EventListener 1.1.1

测试已测试
语言 Obj-CObjective C
许可 MIT
发布最后发布2015年9月

KptainO维护。



  • KptainO

EventListener是一个观察者设计模式的实现,其API与JavaScript/ActionScript DOM中的API非常类似,包括:

  • 事件优先级。高优先级的事件在低优先级事件之前被调用
  • 捕获/目标/冒泡阶段
  • 取消事件默认行为
  • 取消事件传播

有关DOM事件的更多信息请在此处查看

NSNotification有什么问题?

如同EventListener,NSNotification实现了观察者设计模式:您订阅事件/通知。它非常擅长做一件事情:获取全局(或特定对象集合)的通知。但是,在处理UI时它缺少一些关键功能。

  • 您无法停止一个事件。一旦它被触发,所有的监听器都会接收到它。
  • 您无法仅观察来自您的子对象的事件。由于您需要全局监听或者提供一组对象进行过滤,您要么获取所有内容,要么只是从您子对象深度n+1处获取。
  • 您不知道监听器的调用顺序。

EventListener试图通过引入知名的JavaScript DOM API到iOS来超越这些限制。

注意:当您想要发送全局通知时,仍然应该继续使用NSNotification。

如何使用它?

API的表现与DOM事件非常相似。您所需要做的只是:

  • 创建一个自定义事件
  • 添加一个监听器来监听它
  • 触发它
extern NSString *MyCustomEventClicked;
extern NSString *MyCustomEventDoubleClicked;

@interface MyCustomEvent : EVEEvent

// Add all your custom event properties

@end

@implementation aViewController

- (void)aMethod {
  [self addEventListener:MyCustomEventCliked listener:@selector(onClicked:) useCapture:YES];
}

- (void)onClicked:(MyCustomEvent *)event {
  // Do whatever you want
}

@end

/// somewhere in your code
MyCustomEvent *event = [MyCustomEvent event:MyCustomEventClicked];

// configure it
[self dispatchEvent:event];

注意:UIController和UIView是准备好的事件监听器。因此您可以直接在这些类内部触发和/或监听事件!

派发链

EventListener在iOS响应链中派发事件。这就是为什么UIController和UIView能够触发和/或监听事件的原因。