¿Cómo se agrega más de un UIBarButton en UINavigationItem.rightBarButtonItem (o leftBarButtonItem)?

StackOverflow https://stackoverflow.com/questions/1414510

Pregunta

He intentado este enfoque / pirateo: http://blog.blackwhale.at/2009/06/uibuttons-in- uinavigationbar /

El problema es que esto deja una costura débil. 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 he intentado usar un UINavigationBar anidado y parece que no funciona.

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

[EDITAR] Quiero que los botones se vean como UIBarButtonItems normales y poder 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 ...

Por favor, no mencione que esto rompe las pautas de la interfaz humana. (Lo sabemos).

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

¿Fue útil?

Solución

Para deshacerse del fondo ('costura') de una UIToolbar, cree una subclase de UIToolbar y anule el método rect (void) drawRect: (CGRect). Déjelo en blanco y su UIToolbar ya no tendrá fondo.

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

Otros consejos

iOS 5.0 ahora admite múltiples botones. Consulte la documentación de iOS para UINavigationItem. Específicamente, lo siguiente:

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;

Publiqué código para agregar dos botones a la derecha de la barra de navegación . Puede configurar barStyle = -1 en lugar de subclasificar UIToolbar .

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];

vea el ejemplo de uicatalogue disponible en el sitio de Apple de forma gratuita ... utilizaron un control segmentado para mostrar tres botones en lugar del botón de la barra derecha en la barra de navegación ...

No puedo comentar, pero además de @iworkinprogress tuve que establecer el color de fondo de UIToolbar para borrar:

    [toolbar setBackgroundColor:[UIColor clearColor]];

Esto también se encontró en los comentarios de http: //osmorphis.blogspot.com/2009/05/multiple-buttons-on-navigation-bar.html .

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

Se me ocurrió una función auxiliar que estoy usando en 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. Entonces puede llamar a la función solo una 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];
    }
}

Llámelo desde el controlador de vista:

[Helper AddButtonToBar:self withImage:@"imageName.png" withAction:@selector(myAction) withFrame:CGRectMake(0, 0, 24, 24)];
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top