segmented how example custom control change ios xcode uisegmentedcontrol
http://owolf.net/uploads//SegmentedControllers.zip

ios - how - Cambiar UISegmentedControl el índice o valor seleccionado mediante programación



uisegmentedcontrol example (6)

Tengo un UISegmentedControl con dos segmentos (índice: 0 y 1) que estoy tratando de restablecer programáticamente a 0. Cuando ejecuto el siguiente comando, no se restablece el índice del segmento a 0 como se esperaba. En su lugar, destaca el segmento indexado 1.

[seg setSelectedSegmentIndex:0];

Curiosamente cuando registro el segmento seleccionado, devuelve 0 .

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

Curiosamente, después de ejecutar setSelectedSegmentIndex:0 no puedo volver a seleccionar el segmento 0 manualmente al tocarlo, parece estar bloqueado en el segmento 1, hasta que toque 1 en el que funciona como normal.

Aquí está la configuración para el botón:

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 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, obtener la retroalimentación visual apropiada y verificar el índice seleccionado en un método, para que algo suceda dependiendo de índice. Ver mi respuesta a continuación para una solución.


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

Tuve un problema similar La mayoría de las veces mi controlador UISegmentado funcionaba bien. Tiene 4 segmentos, apagado, 30, 60 y 120.

A intervalos aleatorios (¡normalmente justo antes de un lanzamiento!), El segmento Desactivado se vuelve no seleccionable desde la interfaz de usuario. (No intenté seleccionarlo desde el código porque no es lo que tengo que hacer y no resolveré mi problema).

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

Incluso CMD-C y CMD-V pusieron el controlador UISegmented en el XIB de otra aplicación. Y el segmento Off (es decir, el que está en el índice 0) tampoco se pudo seleccionar en ese XIB.

Esto parece ser un problema con XCode.


Cambio en viewDidLoad:

[seg setSelectedSegmentIndex:index];

usted cambia utiliza el valor del índice como su deseo.


Desde el código, solo 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 cargando la vista por primera vez y necesita establecer el control en el valor que tenía durante la ejecución anterior de la aplicación, entonces definitivamente tiene sentido hacerlo allí.


Esto ayuda a ordenar el segmento seleccionado, en términos del feedbak visual, que es después de configurar programáticamente el segmento seleccionado, esto teñirá 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, obtener la retroalimentación visual adecuada y verificar el índice seleccionado en un método, para que algo suceda dependiendo del índice seleccionado.

Originalmente, supuse que esto es tan simple como: mySegmentedController.selectedSegmentIndex = someIndex, luego prueba el índice. Pero como dije en mi pregunta, no funcionó para mí. El comportamiento es extraño. Después de ejecutar ese código, el botón apropiado no se destacaría.

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

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


Swift 3.0

segmentedControl.selectedSegmentIndex = #your value#