2009-11-22 3 views
1

Comment puis-je détecter un contact sur un UIBarButtonItem déjà sélectionné? si je touche UIBarButtonItem, il sera sélectionné ... mais si je touche à nouveau la même chose, comment puis-je l'identifier? toute aide s'il vous plaît?Comment puis-je détecter un contact sur un UIBarButtonItem déjà sélectionné?

le code est le suivant .. initWithCustomView: sortToggle dans lequel sortToggle est le contrôle segmentée ...

UIBarButtonItem *sortToggleButtonItem = [[UIBarButtonItem alloc] 
             initWithCustomView:sortToggle]; 
[sortToggle release]; 

UIBarButtonItem *flexibleSpaceButtonItem = [[UIBarButtonItem alloc] 
        initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace 
             target:nil 
             action:nil]; 

NSArray *buttonArray = [NSArrayarrayWithObjects:flexibleSpaceButtonItem, 
               sortToggleButtonItem, 
               flexibleSpaceButtonItem, nil]; 

[self setToolbarItems: buttonArray animated:YES]; 
+0

Vous devez être un peu plus descriptif à propos de votre question. Est-ce un contrôle segmenté? Est-ce un seul multi-bouton personnalisé? – Garrett

+0

j'ai ajouté le code ... UIbarbuttonitem qui a la vue UIsegmentedcontrol –

+0

ceci est le vol mon cher. méfiez-vous de ne pas abuser anybodies code et dites-le comme urs .... –

Répondre

1

Le UIBarButtonItem ne hérite de la UIResponder de sorte que vous ne pouvez pas obtenir touchesBegan/touchedEnded événements etc directement. Si vous définissez UISegmentedControl comme momentané (yourSegControl.momentary = YES), vous pouvez sélectionner un bouton plusieurs fois. Est-ce utile pour votre situation? Sinon, vous devriez probablement sous-classer le UISegmentedControl (qui hérite de l'UIResponder) et gérer les touches supplémentaires vous-même (n'oubliez pas d'appeler super dans n'importe quelle méthode tactile que vous surchargez).

+0

tout tutoriel monsieur ..? pour le gérer ..? s'il vous plaît ..? –

+0

Avez-vous essayé de définir la propriété .momentary sur YES? – Dimitris

0

je devais être en mesure de détecter lorsque l'utilisateur a sélectionné un index déjà sélectionné, et je trouve que le problème était que le UISegmentedControl ne l'a tiré UIControlEventValueChanged événement. Je voulais être en mesure d'obtenir l'événement UIControlEventTouchUpInside afin que je puisse faire quelque chose.

La solution est de sous-classer UISegmentedControl et d'écraser l'événement tactile pour déclencher l'événement souhaité.

Créer une sous-classe de UISegmentedControl et passer outre touchesBegan: withEvent: ...

/* MySegmentedControl.m, a subclass of UISegmentedControl... */ 
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    //dont forget to call super! 
    [super touchesBegan:touches withEvent:event]; 
    //fire the event we want to listen to 
    [self sendActionsForControlEvents:UIControlEventTouchUpInside]; 
} 

Alors écoutez le UIControlEventTouchUpInside de votre commande segmentée au lieu de UIControlEventValueChanged de sorte que vous obtenez seulement un événement déclenché ... sinon, il déclenchera l'événement UIControlEventValueChanged une fois naturellement, et une fois lorsque vous le lancerez, et vous obtiendrez deux événements (que vous ne voulez évidemment pas). De cette façon, vous obtenez un événement une fois chaque fois que le contrôle est touché, et pas seulement quand sa valeur est modifiée.

+0

et non, vous n'avez pas besoin de définir la propriété .momentary pour que cela fonctionne car vous prenez le contrôle des événements tactiles directement. – Ali

Questions connexes