segmented how example control ios cocoa-touch uisegmentedcontrol

ios - how - Definir evento de clic para UISegmentedControl



swift 4 segmented control example (8)

Así de simple, debe realizar la acción usando el guión gráfico para ver el controlador 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; } }

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


Prueba este,

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


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

o puedes hacerlo en código:

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


Si entiendo su pregunta correctamente, simplemente tiene que implementar un método de acción objetivo (respaldado por UIControl que es la clase padre de UISegmentedControl ) para la constante UIControlEventValueChanged , exactamente como en el ejemplo dado en la documentación de referencia de UISegmentControl.

es decir

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

utilizado para un mensaje 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 tipos estándar de selectores de acción de objetivo utilizados en UIKit.


Vale la pena señalar que el selector tiene que coincidir con un método exactamente, pero sin los parámetros 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 tiempo, y no está del todo claro en las respuestas anteriores.


Versión simple en swift updated

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


para SWIFT usa esto:

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

e implementar 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) } required init(coder aDecoder: NSCoder) { super.init(coder: aDecoder) } func valueChanged(index:Int) { // ACTION GOES HERE } }

y llame a su "valueChanged" en "segmentSelected" de esta manera:

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


prueba esto:

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