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

Ahora estoy probando el Storyboard de la funcionalidad, ya que me prueba a cambiar a «diseño» de la interfaz de usuario en lugar de su aplicación. En el pasado me quedé con mucho los límites de uso de semilla/xib y por lo tanto nunca tener éxito con el interruptor. Así que aquí viene un nuevo intento con storyboading 🙂

Ahora mi pregunta – estoy diseñando un iPad Guión que tiene un Controlador de Navegación y un formato tableview Controlador. Quiero añadir múltiples UIBarButtonItems, pero sólo puedo añadir uno para cada lado con el Interface Builder.

El código sería:

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 utilizando el IB? Sólo hay salidas para leftBarButtonItem, rightBarButtonItems, backBarButtonItems…

Esto me está volviendo loco¡¡¡

Gracias!

InformationsquelleAutor user810395 | 2012-03-27

6 Comentarios

  1. 26

    EDITAR

    En el momento en que respondieron a esta pregunta, Xcode no ofrece la posibilidad de vincular añadido botones en el guión gráfico. El truco presentado permitido tener todavía la lleva diseñado en el guión gráfico.

    Con las más recientes versiones de Xcode, para asegurarse de que la solución introducida por @ecotasa y más tarde la respuesta más detallada de @ShimanskiArtem son los que deben ser utilizados.


    Yo tenía el mismo problema que usted y me encontré con el siguiente truco

    Suponga que tiene un navigationController en el que le gustaría tener varios botones. Desde iOS 5, se puede asignar una matriz. El problema es que se pierden todos los beneficios de usar el guión gráfico como se hará mediante programación.

    He utilizado el siguiente truco. Por lo general, cuando usted desee varias botón en la barra de navegación no quieres una barra de herramientas.

    En la vista actual (no en el controlador de navegación) donde aparecen los botones, mostrar la barra de herramientas cambiando

    bottomBar = infiere que bottomBar = barra de herramientas.

    No se puede asignar varios Botones para UINavigationItem cuando se utiliza Storyboard con iOS 5

    Una barra de herramientas aparecerá en la parte inferior.
    Agregar UIBarButtons a este bar. Enlace a la vista de controladores usando desemboca, etc …

    en su .h archivo de crear una toma de corriente para cada botón

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

    A continuación, en su viewDidLoad() el enlace de los botones de la barra de navegación y ocultar la barra de herramientas. Agregar en el orden inverso de la orden que desea ver

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

    Y voilà tiene varios botones en la barra de navegación

    No se puede asignar varios Botones para UINavigationItem cuando se utiliza Storyboard con iOS 5

    No se puede asignar varios Botones para UINavigationItem cuando se utiliza Storyboard con iOS 5

    y el resultado en el simulador

    No se puede asignar varios Botones para UINavigationItem cuando se utiliza Storyboard con iOS 5

    No se puede asignar varios Botones para UINavigationItem cuando se utiliza Storyboard con iOS 5

    • Gracias es una buena solución. Descripción agradable!
    • Gracias por el comentario. Me costó mucho tiempo encontrar una solución. Esperemos que en futuras versiones de iOS que le dará/añadir la posibilidad de añadir directamente de varios botones.
    • Una pequeña mejora, en mi humilde opinión: el uso de un IBOutletCollection en lugar de múltiples IBOutlets.
    • Ver mi comentario sobre tu respuesta @EduardoCosta
  2. 64

    He encontrado una solución fácil.

    1) Agregar 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) Agregar los elementos a la vista controlador (artículos serán ordenados de forma ascendente por etiqueta)

    No se puede asignar varios Botones para UINavigationItem cuando se utiliza Storyboard con iOS 5

    3) conexión de los elementos con leftBarButtonItemsCollection o rightBarButtonItemsCollection salida de la colección de UINavigationItem

    No se puede asignar varios Botones para UINavigationItem cuando se utiliza Storyboard con iOS 5

    • Esta es una hermosa solución, debe ser aceptada respuesta.
    • Esta solución se merecen más votos.
    • Artem la solución es genial!!! Desde que he empezado mi jurney con iOS podría por favor explicar cómo funciona el compilador sabe que la Categoría debe ser utilizado. Cuál es el mecanismo detrás? Gracias de antemano!
    • No podía hacer esto a través de Swift 1.0 pero importado fina como objc y funciona de maravilla en Xcode 6.0.1. Apreciado!
    • A pesar de que no he logrado terminar el paso 3 en el guión gráfico, tengo todo conectado mediante programación.
    • Brillante respuesta. Para los que tengan problemas con el paso 3, seleccione el elemento de navegación que usted arrastre y agregar a la controladora en el guión gráfico y tendrá rightBarButtonItemsCollection, bajo los puntos de venta. Arrastre de que a los elementos de control para conectar con ellos.
    • Excelente! Esto hizo que mi día. Gracias.
    • Excelente respuesta. Me ayudó mucho. Yo lo hice en swift. @TristanWarner-Smith En swift agregar a la colección a la rightBarButtonItems hizo el truco para mí. No objC necesario. auto.navigationItem.rightBarButtonItems = auto.rightBarButtonCollection
    • Aunque esta es una excelente respuesta, en Xcode 7 es posible añadir múltiples UIBarButtonItems directamente a la izquierda o a la derecha de un IUNavigationItem, que es una solución mucho más sencilla.

  3. 15

    Quería seguir HpTerm del consejo, pero en mi aplicación tengo tanto una barra de herramientas y una barra de navegación.

    He encontrado el método que se describe en su comentario puede ser fácilmente generalizado para apoyar este caso también.
    En lugar de añadir un maniquí de la barra de herramientas, usted puede simplemente añadir botones al mismo nivel que el controlador de vista, ya sea arrastrándolos en la barra negra de abajo:

    No se puede asignar varios Botones para UINavigationItem cuando se utiliza Storyboard con iOS 5

    o en el texto de resumen se muestra a la izquierda:

    No se puede asignar varios Botones para UINavigationItem cuando se utiliza Storyboard con iOS 5

    La asignación de las propiedades de la matriz en viewDidLoad permanece como HpTerm explicó; la única diferencia es que no hay ficticio de la barra de herramientas para esconderse.

  4. 3

    En Xcode7, es posible añadir los múltiples botones para UINavigationItem directamente en el guión gráfico, sin necesidad de crear un IBOutlet. simplemente arrastra varias UIBarItems a la izquierda o a la derecha de la sección de los elementos de Navegación.

    No se puede asignar varios Botones para UINavigationItem cuando se utiliza Storyboard con iOS 5

  5. 0

    @jchnxu si havnt ya averiguado cómo terminar de @Shimanski Artems solución de ir a los tableros de la historia y arrastre un botón de la barra de elemento a la vista controlador tiene su barra de navegación y arrástrelo en la sección donde usted tiene la salida y responder iconos sobre el icono de la batería. Desde allí se puede adjuntar a las colecciones

Dejar respuesta

Please enter your comment!
Please enter your name here