Как я могу определить, какой тип UIControlEvents вызвал UIEvent? - PullRequest
10 голосов
/ 26 мая 2011

Я хочу настроить группу UIControl объектов для отправки всех событий через один и тот же обработчик. Этот обработчик должен определить, какое соответствующее действие основано на типе UIControlEvents, который сработал.

- (void)handleEventFromControl:(id)sender withEvent:(UIEvent *)event {
    UIControl *control = sender;
    NSIndexPath *indexPath = [controlIndexPaths objectForKey:control];
    UIControlEvents controlEventType = event.type; //PROBLEM HERE

    BOOL fire = NO;
    NSNumber *eventCheck = [registeredEventsByToolkitIndex objectAtIndex:indexPath.toolkit];
    fire = ([eventCheck integerValue] & controlEventType);

    if(!fire) {
        eventCheck = [registeredEventsByControlIndex objectAtIndex:indexPath.control];
        fire = ([eventCheck integerValue] & controlEventType);
    }

    if(!fire) {
        eventCheck = [registeredEventsByIndexPath objectForKey:indexPath];
        fire = ([eventCheck integerValue] & controlEventType);
    }

    if(fire) {
        [self.delegate toolkit:self indexPath:indexPath firedEvent:event];
    }
}

Насколько я могу судить, event.type не работает таким образом. Я хочу избежать подкласса UIControl, потому что это серьезное излишество для того, что я хочу сделать. Остальные движущиеся части здесь не так важны; то, что я хочу, это способ проверки UIControlEvents после использования пары target:action: в следующей настройке:

- (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents

Если есть другой способ настройки target:action:, который отправляет обратно UIControlEvents, я бы взял это. Но я не вижу этого в документации. Или, по крайней мере, получить доступ вне объекта UIControl так, чтобы я мог получить нужный тип.

1 Ответ

19 голосов
/ 26 мая 2011

Вы правы;UIEvent.type не работает таким образом.Внутренне, подклассы UIControl в основном используют метод sendActionsForControlEvents:, что означает, что они могут выбрать в качестве параметра все, что захотят.

Что касается того, как узнать, простой ответдолжен иметь отдельный метод для каждого управляющего события.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...