Definir evento de clic para UISegmentedControl

He agregado un UISegmentedControl en mi aplicación. Ninguno de los botones está seleccionado en estado normal. Quiero implementar un evento de clic de button cuando se selecciona el primer segmento, y otro evento cuando se hace clic en otro button.

Si entiendo tu pregunta correctamente, simplemente debes implementar un método de acción de destino (compatible con UIControl que es la class primaria UISegmentedControl ) para el UIControlEventValueChanged constante, exactamente como en el ejemplo dado en la documentation de reference de UISegmentControl.

es decir

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

utilizado para un post con la siguiente firma:

 - (void)action:(id)sender 

o

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

para

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

o

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

para el método más simple:

 - (void)action 

que son los types estándar de selectores de acción de destino utilizados en UIKit.

testing esto:

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

Prueba esta,

  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]; 

luego escribe una acción,

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

Espero que te ayude

Vale la pena señalar que el selector debe coincidir exactamente con un método, pero sin los parameters reales.

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

Esto me confundió por mucho time, y no está del todo claro a partir de las respuestas anteriores.

para SWIFT, use esto:

 segmentedControl.addTarget( self, action: "segmentSelected:", forControlEvents: UIControlEvents.ValueChanged ) 

e implementa un método como este:

 func segmentSelected(sender: UISegmentedControl) { println("selected index: \(sender.selectedSegmentIndex)") } 

Extienda UISegmentedControl si desea llamar a una acción específica cuando se selecciona el segmento seleccionado:

 class CustomSegmentedControl : UISegmentedControl { override init() { super.init() } override init(frame:CGRect) { super.init(frame:frame) } requinetworking init(coder aDecoder: NSCoder) { super.init(coder: aDecoder) } func valueChanged(index:Int) { // ACTION GOES HERE } } 

y llame a su "valorChanged" en "segmentSelected" así:

 func segmentSelected(sender: CustomSegmentedControl) { println("selected index: \(sender.selectedSegmentIndex)") sender.valueChanged(sender.selectedSegmentIndex) } 

De manera simple, debe realizar la acción utilizando el guión gráfico para el controller de visualización para que esta acción funcione.

 - (IBAction)searchSegmentedControl:(UISegmentedControl *)sender { switch (sender.selectedSegmentIndex) { case 0: NSLog(@"First was selected"); break; case 1: NSLog(@"Second was selected"); break; case 2: NSLog(@"Third was selected"); break; default: break; } } 

Puede adjuntar un controller en IB al evento de cambio de valor: UIControlEventValueChanged

o puedes hacerlo en el código:

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

Versión simple en rápido actualizado

 func loadControl(){ self.yourSegmentedControl.addTarget(self, action: #selector(segmentSelected(sender:)), forControlEvents: .valueChanged) } func segmentSelected(sender: UISegmentedControl) { let index = sender.selectedSegmentIndex // Do what you want }