8

我编写了 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];
     }
}

那还能用吗?

4

1 回答 1

21

好的,这是一个古老的主题,但我将对此添加我的答案。即使我怀疑,我也无法确定您是否可以将此掩码用于您自己的应用程序。

但我可以肯定地告诉你如何使用它。对于初学者,此值会屏蔽位置 24、25、26 和 27 的位。您应该编写一个仅使用此位的自己的枚举,例如:

enum {
    MyPrimaryActionEvent = 1 << 24,
    MySecondaryActionEvent = 1 << 25,
};

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

[myButton addTarget:self action:@selector(someAction:) forControlEvents: MyPrimaryActionEvent];

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

[self sendActionsForControlEvents:MyPrimaryActionEvent];

这会将所有操作发送到为 MyPrimaryActionEvent 事件注册的所有目标。你完成了。

于 2010-08-16T14:38:48.447 回答