你能使用UIControlEventApplicationReserved创建自定义事件吗?(问题标题)

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

这会行得通吗?

好的,我知道这是一个旧问题,但是你在这方面取得了任何进展吗? - Steven Noyes
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事件注册的所有目标。然后你就完成了。


1
这是一个老话题,但我应该指出你忽略了 UIControlEventApplicationReserved = 0x0F000000 掩码。对于自定义事件,任何人都应该使用像 0x01000000、0x0D000000 等值。 - kelin
1
不,他们没有忽略UIControlEventApplicationReserved。因为UIControlEvents是一个位掩码,0x0F000000只能获取4个位(0xF在十进制中是16,可以用4个位表示)。因此,应用程序可用的唯一值是0x010000000x020000000x040000000x08000000。这相当于1 << 241 << 251 << 261 << 27 - Guillaume Algis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接