Можете ли вы создавать собственные события с помощью 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];
     }
}

Это даже сработает?


person Leo    schedule 03.09.2009    source источник
comment
Хорошо, я знаю, что это старый вопрос, но вы продвинулись в этом?   -  person Steven Noyes    schedule 08.03.2010


Ответы (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. И вы сделали.

person Psycho    schedule 16.08.2010
comment
Это старая тема, но я должен заметить, что вы игнорируете битовую маску UIControlEventApplicationReserved = 0x0F000000. Для пользовательских событий любой должен использовать такие значения, как 0x01000000, 0x0D000000 etc.. - person kelin; 27.10.2018
comment
Нет, они не игнорируют UIControlEventApplicationReserved. Поскольку UIControlEvents — это битовая маска, 0x0F000000 дает вам только 4 бита (0xF — это 16 в десятичном виде, что может быть выражено 4 битами). Таким образом, единственными доступными значениями для приложения являются 0x01000000, 0x02000000, 0x04000000 и 0x08000000. Что переводится как 1 << 24, 1 << 25, 1 << 26 и 1 << 27. - person Guillaume Algis; 01.03.2019