2010-12-11 14 views
8

Me gustaría insertar un UISegmentedControl en algún lugar de la barra superior de mi UINavigationController.UISegmentedControl incrustado en un UINavigationBar/Item

No es problema incrustándolo en un UIBarButtonItem y configurándolo como el barButtonItem izquierdo o derecho.

Puedo entender este enfoque cuando se trata de la pantalla de bienes raíces de un iPhone. Sin embargo, estoy haciendo esto en un Popover en un iPad y hay "muchos" espacios verticales disponibles en la barra superior. Si agrego SegmentedControl como un barButtonItem izquierdo o derecho, se reduce su escala para que no pueda ver el texto en el botón de mi segmento, tiene el ancho de un botón "Listo", etc. Si trato de agregarlo al navigationItem TitleView se mostrará todo el camino hacia la derecha y aún se reducirá más de lo que mi control de 3 segmentos puede mostrar con texto.

¿Cómo voy a agregar un UISegmentedControl al centro de UINavigationController que envuelve el contenido de mi popovers.

Espero que alguien me pueda ayudar :) gracias de antemano.

Respuesta

21

¿Por qué necesitarías poner el control en la barra de título de popover? iPad tiene mucho más espacio en pantalla para considerar ponerlo en la vista a continuación.

- EDITAR -

he intentado yo mismo y funciona. Aquí está el código de la configuración del controlador de popover:

- (IBAction) showPopover: (id) sender 
{ 
    TestController *testController = [[TestController alloc] initWithStyle: UITableViewStylePlain]; 
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController: testController]; 
    UIPopoverController *controller = [[UIPopoverController alloc] initWithContentViewController: navController]; 
    [controller presentPopoverFromBarButtonItem: sender permittedArrowDirections: UIPopoverArrowDirectionAny animated: YES]; 
    controller.delegate = self; 
    [testController release]; 
    [navController release]; 
} 

Aquí está la implementación de TestController:

- (id) initWithStyle: (UITableViewStyle) style 
{ 
    if ((self = [super initWithStyle: style])) { 
     UISegmentedControl *ctrl = [[UISegmentedControl alloc] initWithFrame: CGRectZero]; 
     ctrl.segmentedControlStyle = UISegmentedControlStyleBar; 
     [ctrl insertSegmentWithTitle: @"One" atIndex: 0 animated: NO]; 
     [ctrl insertSegmentWithTitle: @"Two" atIndex: 0 animated: NO]; 
     [ctrl insertSegmentWithTitle: @"Three" atIndex: 0 animated: NO]; 
     [ctrl sizeToFit]; 
     // Any of the following produces the expected result: 
     self.navigationItem.titleView = ctrl; 
     //self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView: ctrl] autorelease]; 
     [ctrl release]; 
    } 
    return self; 
} 

Aquí está el resultado:

alt text alt text

No hay trucos en mi código además de enviar sizeToFit al control segmentado. ¿Esto funciona para tí?

+0

Hola, contextualmente pertenece en el bar y no en el contenido. Al igual que no tendría sentido si Apple hubiera puesto el control segmentado "siguiente mensaje, flecha arriba/abajo" en la aplicación de correo, dentro del correo electrónico seleccionado. O si un controlador segmentado para ordenar una lista fue colocado en la lista. – RickiG

+0

Ya veo. He editado mi respuesta con código de trabajo y capturas de pantalla. Espero que esto ayude. – Costique

+0

Gracias :) Eso es genial, es la llamada a sizeToFit lo que hace toda la diferencia. Gracias de nuevo. – RickiG

Cuestiones relacionadas