Я записал подкласс 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];
}
}
Это даже работало бы?
Хорошо, это старая тема, но я собираюсь добавить свой ответ на нее. Я не могу точно сказать, можете ли вы использовать эту маску для своего собственного приложения, хотя я подозреваю это.
Но я могу точно сказать, как им пользоваться. Для начала это значение маскирует биты в позициях 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. И вы сделали.