2009-09-12 4 views
15

He intentado este enfoque/Hack: http://blog.blackwhale.at/2009/06/uibuttons-in-uinavigationbar/¿Cómo se agrega más de un UIBarButton en UINavigationItem.rightBarButtonItem (o leftBarButtonItem)?

El problema es que esto deja un leve costura. Intenté configurar la imagen de fondo de la barra de herramientas anidada en una imagen que capturé de lo que debería ser. Eso no funcionó. La imagen no fue aplicada. También intenté usar un UINavigationBar anidado y eso no pareció funcionar.

He visto esto hecho en varias aplicaciones de iPhone. ¿Alguien sabe cómo?

[EDITAR] Quiero que los botones se vean como UIBarButtonItems normales y pueda usar estilos de sistema como UIBarButtonSystemItemAdd, UIBarButtonSystemItemRefresh. El enlace que proporcioné hace esto, excepto que puede ver una costura débil porque es una UIToolbar anidada en la barra de navegación ..

No mencione esta posibilidad de romper las Pautas de interfaz humana. (Sabemos).

Te agradezco que contribuyas con tus hacks ... ¡esa es la única forma de hacerlo!

+0

El enlace que usted ha mencionado se ha reducido :-( –

Respuesta

6

para deshacerse de los antecedentes ('seam') de una UIToolbar, cree una subclase de UIToolbar y anule el método (void) drawRect: (CGRect) rect. Deje eso en blanco y su UIToolbar ya no tendrá un fondo.

Acabo de usar esto en mi propio proyecto y funcionó muy bien. Encontrado esto en los comentarios de: http://osmorphis.blogspot.com/2009/05/multiple-buttons-on-navigation-bar.html

+2

FYI, iOS 5.0 admite múltiples botones de la barra de navegación. Ver la respuesta que publiqué a continuación. Sin embargo, si necesita implementar versiones anteriores del sistema operativo, deberá utilizar la técnica que se describe en esta respuesta. –

2

ver ejemplo uicatalogue disponible en el sitio de Apple de forma gratuita ... que utilizan el control uisegmented para mostrar tres botones en lugar del botón de la barra a la derecha en la barra navigaion ...

+0

Lo siento, no estoy buscando un control de segmento. Quiero que los botones estándar como + (botón Agregar), Editar, actualizar icono, etc. – Cal

+0

puede agregar una vista personalizada con los botones que desee ... buscar en google el código de vista personalizado ... usted lo hará ser capaz de conseguirlo –

+0

hay muchos tutoriales en la red para hacer esto. si has intentado publicar tu código –

3
UIView *parentView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, myWidth, myHeight)]; 
// make UIView customView1... (UILabel, UIButton, etc.) with desired frame and settings 
[parentView addSubview:customView1]; 
[customView1 release]; 
// make UIView customView2... (UILabel, UIButton, etc.) with desired frame and settings 
[parentView addSubview:customView2]; 
[customView2 release]; 
UIBarButtonItem *customBarButtomItem = [[UIBarButtonItem alloc] initWithCustomView:parentView]; 
[parentView release]; 
self.navigationItem.rightBarButtonItem = customBarButtomItem; 
[customBarButtomItem release]; 
+0

Quiero que los botones se vean como UIBarButtonItems normales y pueda usar estilos de sistema como UIBarButtonSystemItemAdd, UIBarButtonSystemItemRefresh. El enlace que proporcioné hace esto, excepto que puede ver una costura débil porque es una UIToolbar anidada en la barra de navegación. – Cal

+0

alex respuesta funciona para usted perfectamente –

+0

Intenté esto antes y el botón se ve diferente. Pero puede tomar una imagen de captura de pantalla del aspecto que desea y usar eso en el botón. – Cal

0

En iOS 4.x el clearColor parece no tener ningún efecto en la UIToolbar, mientras que anula su drawRect: did.

36

iOS 5.0 ahora es compatible con varios botones. Consulte la documentación de iOS para UINavigationItem. En concreto, los siguientes:

Propiedades:

@property(nonatomic, copy) NSArray *leftBarButtonItems; 
@property(nonatomic, copy) NSArray *rightBarButtonItems; 
@property BOOL leftItemsSupplementBackButton; 

Métodos:

- (void)setLeftBarButtonItems:(NSArray *)items animated:(BOOL)animated; 
- (void)setRightBarButtonItems:(NSArray *)items animated:(BOOL)animated; 
0

me ocurrió con una función de ayuda que estoy usando todo mi proyecto. Básicamente comprueba si ya hay un botón en la barra y agrega el nuevo o lo combina con los botones existentes.Así que usted puede llamar a la función de una sola vez o varias veces:

+ (void)AddButtonToBar:(UIViewController *)controller withImage:(NSString *)imageName withAction:(SEL)action withFrame:(CGRect) frame{ 
    UIButton *newButton =[[UIButton alloc] init]; 
    [newButton setBackgroundImage:[UIImage imageNamed:imageName] forState:UIControlStateNormal]; 
    newButton.frame = frame; 
    [newButton addTarget:controller action:action forControlEvents:UIControlEventTouchUpInside]; 

    if ([[controller.navigationItem rightBarButtonItems] count] == 0) 
     [controller.navigationItem setRightBarButtonItem:[[UIBarButtonItem alloc] initWithCustomView:newButton]]; 
    else { 
     NSMutableArray *existingButtons = [[NSMutableArray alloc] initWithArray:[controller.navigationItem rightBarButtonItems]]; 
     [existingButtons addObject:[[UIBarButtonItem alloc] initWithCustomView:newButton]]; 
     [controller.navigationItem setRightBarButtonItems:(NSArray *)existingButtons]; 
    } 
} 

llamada desde el controlador de vista:.

[Helper AddButtonToBar:self withImage:@"imageName.png" withAction:@selector(myAction) withFrame:CGRectMake(0, 0, 24, 24)]; 
Cuestiones relacionadas