2010-10-22 17 views
1

Je souhaite enregistrer une fonction sur un UISegmentedControl pour l'événement UIControlEventTouchUpInside - et nonUIControlEventValueChanged. Je veux spécifiquement m'assurer qu'il ne se déclenche que lorsque l'utilisateur touche l'élément, et non lorsque sa valeur est définie par programme.Comment enregistrer UIControlEventTouchUpInside sur UISegementedControl?

Des suggestions?

Répondre

5

La clé, j'ai trouvé, est de sous-classer UISegmentedControl. Dans des conditions normales, UISegmentedControl ne répond tout simplement pas à UIControlEventTouchUpInside. Par le sous-classement UISegmentedControl, vous pouvez redéfinir la fonction touchesEnded (qui est essentiellement ce qui est déclenché lorsque l'utilisateur touche un objet) en tant que tel:

-(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]; 
    } 
} 
+0

mise en œuvre tueur – lol

3

je trouve que j'ai pu utiliser un UITapGestureRecognizer sur un UISegmentedControl, que je pense que devrait résoudre votre problème.

+0

C'est tellement plus simple que tout ce que j'ai vu suggéré. Fonctionne parfaitement aussi. Merci :) –