Cambiar UISegmentedControl el índice o el valor seleccionado programáticamente

Tengo un UISegmentedControl con dos segmentos (índice: 0 y 1) que estoy intentando restablecer programáticamente a 0. Cuando ejecuto el command a continuación, no restablece el índice de segmento a 0 como se esperaba. En cambio, destaca el segmento indexado 1.

[seg setSelectedSegmentIndex:0]; 

Curiosamente cuando logging el segmento seleccionado, devuelve 0 .

  NSLog(@"seg setSelectedSegmentIndex %d", seg.selectedSegmentIndex); 

También extrañamente, después de ejecutar setSelectedSegmentIndex:0 No puedo volver a seleccionar el segmento 0 manualmente setSelectedSegmentIndex:0 , parece estar bloqueado en el segmento 1, hasta que toque 1 en el que funciona de manera normal.

Aquí está la configuration del button:

  itemArray = [NSMutableArray arrayWithObjects: @"Zero", @"One", nil]; seg = [[UISegmentedControl alloc] initWithItems:itemArray]; [seg setFrame:segRect]; seg.segmentedControlStyle = UISegmentedControlStyleBar; seg.momentary = NO; [seg addTarget:self action:@selector(someAction:) forControlEvents: UIControlEventValueChanged]; [mainView addSubview:seg]; 

NOTA: Para reformular lo que estaba tratando de lograr con esta pregunta: Quiero establecer un índice seleccionado de UISegmentedControl a través de una variable de forma dinámica, get la información visual adecuada y verificar el índice seleccionado en un método para hacer que algo suceda según el seleccionado índice. Vea mi respuesta a continuación para get una solución.

Cambiar en la viewDidLoad:

 [seg setSelectedSegmentIndex:index]; 

Cambia usa el valor del índice como tu deseo.

Desde el código, puede hacer seg.selectedSegmentIndex = someDefaultIndex .

Si debe configurarlo en viewDidLoad: o no depende completamente de la estructura de su aplicación. Por ejemplo, si su aplicación se está iniciando y carga la vista por primera vez y necesita configurar el control con el valor que tuviera durante la ejecución anterior de la aplicación, entonces definitivamente tiene sentido hacerlo allí.

Esto ayuda a orderar el segmento seleccionado, en términos de la fuente de alimentación visual, es decir, después de progtwigr el segmento seleccionado de manera progtwigda, esto matizará los segmentos correctamente.

 for (int i=0; i<[seg.subviews count]; i++) { if ([[seg.subviews objectAtIndex:i] respondsToSelector:@selector(isSelected)] && [[seg.subviews objectAtIndex:i]isSelected]) { [[seg.subviews objectAtIndex:i] setTintColor:[UIColor grayColor]]; } if ([[seg.subviews objectAtIndex:i] respondsToSelector:@selector(isSelected)] && ![[seg.subviews objectAtIndex:i] isSelected]) { [[seg.subviews objectAtIndex:i] setTintColor:[UIColor blackColor]]; } } 

Para reafirmar lo que estaba tratando de lograr con esta pregunta: Quiero establecer un índice seleccionado de UISegmentedControl a través de una variable de forma dinámica, get la información visual apropiada y verificar el índice seleccionado en un método para hacer que algo suceda según el índice seleccionado.

Originalmente supuse que esto es tan simple como: mySegmentedController.selectedSegmentIndex = someIndex, luego testing para el índice. Pero como dije en mi pregunta, no estaba funcionando para mí. El comportamiento es extraño. Después de ejecutar ese código, el button correspondiente no se resalta.

Aquí hay un proyecto donde lo arreglé, por lo que funciona. No estoy seguro exactamente por qué funciona. Posiblemente un retraso que puse allí, antes de establecer el índice. Actualizaré y comentaré el file del proyecto si puedo refinarlo.

http://owolf.net/uploads/StackOverflow/SegmentedControllers.zip

ADVERTENCIA: Esto no responde a la pregunta, pero está estrechamente relacionado.

Tuve un problema similar. La mayoría de las veces mi UISegmentedController funcionó bien. Tiene 4 segmentos, Off, 30, 60 y 120.

A intervalos aleatorios (¡normalmente justo antes de una liberación!), El segmento Off se vuelve no seleccionable desde la interfaz de usuario. (No intenté seleccionarlo de código porque eso no es lo que necesito hacer y no resolverá mi problema).

La solución es eliminar ese UISegmentedController de mi XIB y replacelo por uno nuevo (y exactamente idéntico) que luego funciona bien.

Incluso CMD-C y CMD-V hicieron que el infractor UISegmentedController entrara en otra aplicación XIB. Y el segmento Off (es decir, el del índice 0) no fue seleccionable en ese XIB también.

Esto parece ser un problema con XCode.

Swift 3.0

 segmentedControl.selectedSegmentIndex = #your value#