Я столкнулся с той же проблемой и нашел решение. Это не удивительно красиво, но работает довольно хорошо. Это категория UIControl, в которой хранится последнее событие UIControlEvent, запущенное в собственном свойстве тега. Вы можете получить его по ссылке ниже. Для дальнейшего ознакомления, вот документ из моей категории, для более подробного описания того, что происходит.
Надеюсь, это поможет! Приветствия / J
UIControl + CaptureUIControlEvents
git gist at: http://gist.github.com/513796
ПРОБЛЕМА: при стрельбе события UIControlEvents не передаются в целевое действие
назначен на конкретное событие. Это было бы полезно для того, чтобы иметь только
одно действие, которое переключается на основе запущенного UIControlEvent.
РЕШЕНИЕ: добавьте способ хранения UIControlEvent, запущенного в UIEvent.
ПРОБЛЕМА: Но мы не можем переопределить частные API, поэтому:
(ХОРОШО) РЕШЕНИЕ: запустите UIControl для последнего запуска UIControlEvent.
Документация UIControl гласит:
Когда пользователь касается элемента управления способом, который соответствует одному или нескольким
указанные события, UIControl отправляет себе sendActionsForControlEvents :.
Это приводит к тому, что UIControl отправляет действие в UIApplication в
sendAction: to: from: forEvent: message.
Можно подумать, что sendActionsForControlEvents: может быть переопределено (или
подкласс) для хранения флага, но это не так. Кажется, что
sendActionsForControlEvents: в основном для клиентов, чтобы инициировать события
программно.
Вместо этого мне пришлось настроить схему, которая регистрирует действие для каждого элемента управления
событие, которое каждый хочет отследить. Я решил не отслеживать все события (или в
все UIControls) для производительности и простоты использования.
ПРИМЕР ИСПОЛЬЗОВАНИЯ:
При настройке UIControl:
UIControlEvents capture = UIControlEventTouchDown;
capture |= UIControlEventTouchDown;
capture |= UIControlEventTouchUpInside;
capture |= UIControlEventTouchUpOutside;
[myControl captureEvents:capture];
[myControl addTarget:self action:@selector(touch:) forControlEvents:capture];
И целевое действие:
- (void) touch:(UIControl *)sender {
UIColor *color = [UIColor clearColor];
switch (sender.tag) {
case UIControlEventTouchDown: color = [UIColor redColor]; break;
case UIControlEventTouchUpInside: color = [UIColor blueColor]; break;
case UIControlEventTouchUpOutside: color = [UIColor redColor]; break;
}
sender.backgroundColor = color;
}