您可以使用UIControlEventApplicationReserved创建自定义事件吗?

Leo*_*Leo 8 iphone events event-handling gesture-recognition

我编写了一个UIControl的子类,它跟踪了我感兴趣的一些手势.在UIControlEvents枚举的文档中,它说有一系列名为UIControlEventApplicationReserved的事件编号"可供应用程序使用".这是否意味着我可以自由地将此范围的数字用于我自己的自定义事件?

如果是这样,有人可以告诉我如何发射事件?我能想到的显而易见的方法是:

enum {
     ...
     MyCustomEvent = 65,
     ...
};

...

UIEvent* customEvent;

...

for (id target in [self allTargets])
{
     for (NSString* action in [self actionsForTarget:target forControlEvent:MyCustomEvent])
     {
          [self sendAction:NSSelectorFromString(action) to:target forEvent:customEvent];
     }
}
Run Code Online (Sandbox Code Playgroud)

那甚至会起作用吗?

Psy*_*cho 21

好的,这是一个古老的主题,但我想补充一下这个问题.即使我怀疑它,我也无法确定你是否可以将这个面具用于你自己的应用程序.

但我可以告诉你如何使用它.对于启动器,此值会屏蔽位置24,25,26和27处的位.您应该编写自己的枚举,仅使用此位,例如:

enum {
    MyPrimaryActionEvent = 1 << 24,
    MySecondaryActionEvent = 1 << 25,
};
Run Code Online (Sandbox Code Playgroud)

完成后,您可以注册以下操作:

[myButton addTarget:self action:@selector(someAction:) forControlEvents: MyPrimaryActionEvent];
Run Code Online (Sandbox Code Playgroud)

每次触发动作MyPrimaryActionEvent时,self都会收到someAction:消息.现在,如何触发该操作取决于按钮本身.在您自己的UIControl子类中,您可以触发更改,如下所示:

[self sendActionsForControlEvents:MyPrimaryActionEvent];
Run Code Online (Sandbox Code Playgroud)

这会将所有操作发送到为MyPrimaryActionEvent事件注册的所有目标.而且你已经完成了.