No se pueden asignar varios botones a UINavigationItem al usar Storyboard con iOS 5

Soy un desarrollador de iOS con mucha experiencia en el desarrollo de la interfaz de usuario por código.

Ahora estoy probando la funcionalidad Storyboard, porque estoy probando cambiar a “diseñar” la interfaz de usuario en lugar de implementarla. En el pasado, me mantuve con muchos límites usando nib / xib’s y por lo tanto nunca tuve éxito con el cambio. Así que aquí viene un nuevo bash con storyboading 🙂

Ahora mi pregunta: estoy diseñando un guión gráfico para iPad que tiene un controlador de navegación y un controlador Tableview. Quiero agregar varios UIBarButtonItems, pero puedo agregar uno para cada lado con el Interface Builder.

El código se vería así:

UIBarButtonItem *b = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemBookmarks target:nil action:nil]; UIBarButtonItem *spacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]; spacer.width = 20; self.navigationItem.rightBarButtonItems = [NSArray arrayWithObjects:self.editButtonItem, spacer, b, nil]; 

¿Pero por qué no puedo agregar varios botones usando el IB? Solo hay puntos de venta para leftBarButtonItem, rightBarButtonItems, backBarButtonItems …

Esto me está volviendo loca

¡Gracias!

    EDITAR

    En el momento en que respondí esta pregunta, Xcode no ofrecía la posibilidad de vincular botones agregados en el guión gráfico. El truco presentado permite seguir teniendo los segues diseñados en el guión gráfico.

    Con las versiones más recientes de Xcode, seguramente la solución introducida por @ecotax y luego la respuesta más detallada de @ShimanskiArtem son las que se utilizarán.


    Tuve el mismo problema que tú y encontré el siguiente truco

    Supongamos que tiene un navigationController en el que le gustaría tener varios botones. Desde iOS 5 puedes asignar una matriz. El problema es que pierdes todos los beneficios de usar el guión gráfico, ya que se realizará de forma programática.

    Usé el siguiente truco. Por lo general, cuando quiere un botón múltiple en la barra de navegación, no quiere una barra de herramientas.

    En la vista actual (no en el controlador de navegación) donde desea que aparezcan los botones, muestre la barra de herramientas cambiando

    bottomBar = inferido a bottomBar = barra de herramientas.

    enter image description here

    Una barra de herramientas aparecerá en la parte inferior. Agregue UIBarButtons a esta barra. Conéctelos a otros controladores de vista usando segues, etc.

    en tu archivo .h crea una salida para cada botón

     @property (strong, nonatomic) IBOutlet UIBarButtonItem *Button1; @property (strong, nonatomic) IBOutlet UIBarButtonItem *Button2; @property (strong, nonatomic) IBOutlet UIBarButtonItem *Button3; 

    Luego, en su viewDidLoad (), vincule los botones a la barra de navegación y oculte la barra de herramientas. Agréguelos en el orden inverso al orden en que desea verlos

     self.navigationItem.rightBarButtonItems = [NSArray arrayWithObjects:self.Button3, self.Button2, self.Button1, nil]; self.navigationController.toolbarHidden = YES; 

    Y voilà tienes múltiples botones en tu barra de navegación

    enter image description here

    enter image description here

    y el resultado en el simulador

    enter image description here

    enter image description here

    Encontré una solución fácil.

    1) Agregue la siguiente categoría:

     @interface UINavigationItem(MultipleButtonsAddition) @property (nonatomic, strong) IBOutletCollection(UIBarButtonItem) NSArray* rightBarButtonItemsCollection; @property (nonatomic, strong) IBOutletCollection(UIBarButtonItem) NSArray* leftBarButtonItemsCollection; @end @implementation UINavigationItem(MultipleButtonsAddition) - (void) setRightBarButtonItemsCollection:(NSArray *)rightBarButtonItemsCollection { self.rightBarButtonItems = [rightBarButtonItemsCollection sortedArrayUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"tag" ascending:YES]]]; } - (void) setLeftBarButtonItemsCollection:(NSArray *)leftBarButtonItemsCollection { self.leftBarButtonItems = [leftBarButtonItemsCollection sortedArrayUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"tag" ascending:YES]]]; } - (NSArray*) rightBarButtonItemsCollection { return self.rightBarButtonItems; } - (NSArray*) leftBarButtonItemsCollection { return self.leftBarButtonItems; } @end 

    2) Agregue sus artículos para ver el controlador (los artículos serán ordenados ascendentemente por etiqueta)

    enter image description here

    3) Conecte sus artículos con leftBarButtonItemsCollection o rightBarButtonItemsCollection colección de salida de UINavigationItem

    enter image description here

    Quería seguir el consejo de HpTerm, pero en mi aplicación tengo tanto una barra de herramientas como una de navegación.
    Descubrí que el método descrito en su comentario puede generalizarse fácilmente para apoyar este caso también. En lugar de agregar una barra de herramientas ficticia, puede simplemente agregar los botones al mismo nivel que el controlador de vista, ya sea arrastrándolos en la barra negra a continuación:

    enter image description here

    o en la descripción textual mostrada a la izquierda:

    enter image description here

    Asignar las propiedades a la matriz en viewDidLoad permanece como HpTerm explicado; la única diferencia es que ya no hay una barra de herramientas ficticia para ocultar.

    En Xcode7, es posible agregar los botones múltiples a UINavigationItem directamente en el guión gráfico, sin crear un IBOutlet. simplemente arrastre varios UIBarItems a la sección izquierda o derecha del elemento de navegación.

    Agregar varios UIBarItems al elemento de navegación

    @jchnxu si todavía no descubrió cómo terminar la solución de @Shimanski Artems vaya a story boards y arrastre un elemento de botón de barra al controlador de vista en el que tiene su barra de navegación y arrástrelo en la sección donde tiene los icons de salida y respuesta encima del ícono de la batería. Desde allí, puede adjuntarlos a las colecciones

    Hombre, intenta esto!

     self.navigationItem.rightBarButtonItems = @[self.editButtonItem, spacer, b];