Как зарегистрировать UIControlEventTouchUpInside на UISegementedControl? - PullRequest
1 голос
/ 22 октября 2010

Я хочу зарегистрировать функцию на UISegmentedControl для события UIControlEventTouchUpInside - , а не UIControlEventValueChanged. Я специально хочу убедиться, что он срабатывает только тогда, когда пользователь касается элемента, а не когда его значение установлено программно.

Есть предложения?

Ответы [ 2 ]

5 голосов
/ 24 октября 2010

Ключ, как я обнаружил, заключается в создании подкласса UISegmentedControl. В обычных условиях UISegmentedControl просто не отвечает на UIControlEventTouchUpInside. Подклассифицируя UISegmentedControl, вы можете переопределить функцию touchesEnded (которая, по сути, является тем, что запускается при касании объекта):

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    [super touchesEnded:touches withEvent:event];
    [self.superview touchesEnded:touches withEvent:event];

    MyViewController *vc; // the view controller which contains the UISegmentedControl
    for (UIView* next = [self superview]; next; next = next.superview) {
        UIResponder* nextResponder = [next nextResponder];
        if ([nextResponder isKindOfClass:[MyViewController class]]) {
            vc = (MyViewController*)nextResponder;
            break;
        }
    }

    if (vc) {
        [vc myFunction];
    }
} 
3 голосов
/ 16 ноября 2011

Я обнаружил, что смог использовать UITapGestureRecognizer на UISegmentedControl, что, я думаю, должно решить вашу проблему.

...