60 votes

Définir l'événement de clic pour UISegmentedControl

J'ai ajouté un UISegmentedControl dans mon application. Aucun des boutons n'est sélectionné dans l'état normal. Je veux implémenter un événement de clic de bouton lorsque le premier segment est sélectionné, et un autre événement lorsqu'un autre bouton est cliqué.

126voto

macbirdie Points 9417

Si je comprends bien votre question, il suffit d'implémenter une méthode de type "target-action" (prise en charge par UIControl qui est UISegmentedControl ) pour la constante UIControlEventValueChanged exactement comme dans l'exemple donné dans le fichier de configuration de UISegmentControl documents de référence .

c'est-à-dire

[segmentedControl addTarget:self
                     action:@selector(action:)
           forControlEvents:UIControlEventValueChanged];

utilisé pour un message avec la signature suivante :

- (void)action:(id)sender

ou

[segmentedControl addTarget:self
                     action:@selector(action:forEvent:)
           forControlEvents:UIControlEventValueChanged];

pour

- (void)action:(id)sender forEvent:(UIEvent *)event

ou

[segmentedControl addTarget:self
                     action:@selector(action)
           forControlEvents:UIControlEventValueChanged];

pour la méthode la plus simple :

- (void)action

qui sont des types standard de sélecteurs cible-action utilisés dans UIKit.

65voto

aRosPT Points 321

Essayez ceci :

- (IBAction)segmentSwitch:(UISegmentedControl *)sender {
      NSInteger selectedSegment = sender.selectedSegmentIndex;

      if (selectedSegment == 0) {

      }
      else{

      }
    }

9voto

Sivanathan Points 782

Essaie celle-là,

    UISegmentedControl  * travelModeSegment = [[UISegmentedControl alloc] initWithItems:
    [NSArray arrayWithObjects:NSLocalizedString(@"Driving", nil),                 NSLocalizedString(@"Walking", nil), nil]];
    [travelModeSegment setFrame:CGRectMake(9.0f, 0.0f, 302.0f, 45.0f)];
    [cell addSubview:travelModeSegment];
    [travelModeSegment release];

puis écrivez une action,

     if (travelModeSegment.selectedSegmentIndex == 0) {
        //write here your action when first item selected
    } else {
        //write here your action when second item selected
    }

J'espère que cela vous aidera

7voto

Jonathan Points 6934

Il convient de noter que le sélecteur doit correspondre exactement à une méthode, mais sans les paramètres réels.

@selector(action)
    => -(void) action { ..code.. }

@selector(action:) 
    => -(void) action:(id)sender { ..code.. }

@selector(action:forEvent:) 
    => -(void) action:(id)sender forEvent:(UIEvent *)event { ..code.. }

Cela m'a longtemps dérouté, et ce n'est pas très clair dans les réponses précédentes.

2voto

progrmr Points 32412

Vous pouvez attacher un gestionnaire dans IB à l'événement de changement de valeur : UIControlEventValueChanged

ou vous pouvez le faire en code :

[segmentedControl addTarget:self
                     action:@selector(action:)
           forControlEvents:UIControlEventValueChanged];

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X