Можно ли сделать пользовательские события с UIControlEventApplicationReserved?

Я записал подкласс 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];
     }
}

Это даже работало бы?

8
задан Leo 3 September 2009 в 06:56
поделиться

1 ответ

Хорошо, это старая тема, но я собираюсь добавить свой ответ на нее. Я не могу точно сказать, можете ли вы использовать эту маску для своего собственного приложения, хотя я подозреваю это.

Но я могу точно сказать, как им пользоваться. Для начала это значение маскирует биты в позициях 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. И вы сделали.

21
ответ дан 5 December 2019 в 07:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: