用于 iOS 应用的事件处理框架
该框架为 NSObjects 提供了责任链,同时也可以用于处理 UIViewControllers 内的 UI 事件(例如 UI 的变化、导航请求等)。
类别 NSObject+EPController.h
实现了协议 EPController
并包含事件代理的行为
@protocol EPController <NSObject>
- (id <EPController>)nextEPResponder;
- (void)setNextEPResponder:(id<EPController>)nextEPResponder;
- (void)processEPEvent:(EPEvent *)event;
@end
自定义事件必须继承自 EPEvent,例如 @interface EPSampleEvent : EPEvent
。要在控制器中处理自定义事件,需要添加事件支持
@implementation EPSampleViewController
+ (void)initialize
{
if (self == EPSampleViewController.class) {
[self registerForEPEventClass:EPSampleEvent.class selector:@selector(handleEPSampleEvent:)];
}
}
- (void)handleEPSampleEvent:(EPSampleEvent *)event
{
event.result = @"Good result";
}
@end
方法 processEPEvent:
将事件传递到以该对象开始的链,并在新xEPResponder 链中遍历。EPViewController 具有类似于 UIResponder 链的嵌套支持(UIEvent 不提供定制的功能),排除内部 UIView。视图控制器应继承自 EPViewController(或单独实现 EPController 逻辑),例如 @interface EPSampleViewController : EPViewController
。对于子控制器,它会自动将它们添加到事件链中。从控制器发出的事件将通过链传递给可以处理该事件的控制器。