2010-08-16 8 views

Respuesta

20

+1 para la respuesta de Ben, aunque al girar el control segmentado también se rota el texto dentro. ¡Nunca temas! Sólo tenemos que girar las etiquetas en el interior, así:

NSArray *arr = [segmentedControl subviews]; 
    for (int i = 0; i < [arr count]; i++) { 
    UIView *v = (UIView*) [arr objectAtIndex:i]; 
    NSArray *subarr = [v subviews]; 
     for (int j = 0; j < [subarr count]; j++) { 
      if ([[subarr objectAtIndex:j] isKindOfClass:[UILabel class]]) { 
       UILabel *l = (UILabel*) [subarr objectAtIndex:j]; 
       l.transform = CGAffineTransformMakeRotation(- M_PI/2.0); //do the reverse of what Ben did 
      } 
     } 
    } 

Swift versión 2:

for view in segmentedControl.subviews { 
    for subview in view.subviews { 
     if subview.isKindOfClass(UILabel) { 
      subview.transform = CGAffineTransformMakeRotation(CGFloat(-M_PI/2.0)) 
     } 
    } 
} 
+1

Esto funciona bien para las etiquetas, pero si su control tiene imágenes en su lugar, no funciona. En ese caso, seguiría la sugerencia de Ben y luego solo rotaría las imágenes en la herramienta Vista previa de OSX (o Photoshop) en lugar de tratar de rotar el UIImageView en su código. –

+1

Este código se basa en la implementación interna (no documentada) de UISegmentedControl. Es propenso a fallas cada vez que Apple cambia la implementación de este control. Incluso un cambio simple como la inserción de una capa adicional de vistas entre las instancias de UILabel que está buscando y el nivel superior rompería este código. – Arda

+0

@Arda Podría romperse, pero tomaría alrededor de 10 minutos inventar su propio controlador segmentado que hiciera lo mismo si ese fuera el caso, entonces hágalo y disfrútelo. Lo más probable es que siempre puedas encontrar la forma de hacer esto si algo cambia. – Sethmr

4

Este control es horizontal solamente. Desde el UISegementedControl documentación:

objeto A UISegmentedControl es un control horizontal hecha de múltiples segmentos, cada segmento que funciona como un botón discreto. Un control segmentado ofrece un medio compacto para agrupar junto con una serie de controles.

Tendrás que hacer esto como un control personalizado.

22

Siempre puede modificar la transformación en el control segmentado.

segmentedControl.transform = CGAffineTransformMakeRotation (M_PI/2.0);

+0

+1 por responder la pregunta :). Me pregunto acerca de la usabilidad de un control segmentado rotado. – RedBlueThing

+0

Sí, no estaba juzgando si era una buena idea o no ;-) –

+0

@ ben-gottlieb Una calidad admirable :) – RedBlueThing

0

he encontrado el control por debajo de los controles de cacao que se ve bien. Es un control personalizado y se ve como una subclase de UIControl.

smverticalsegmentedcontrol

Pero si me preguntas, puedo intentar un enfoque diferente, voy a crear un tabelview con un ancho de columna (44px) y mantenerlo como un niño en el envase y puede alinearlo a una esquina del contenedor, personalice las celdas y tenga mi lista en ese y en el toque de cada fila, cargue el contenido correspondiente en la vista de detalles en su contenido. No lo intenté, trataré de publicar los resultados pronto.

Cuestiones relacionadas