apple - ios storyboard
No se pueden asignar varios botones a UINavigationItem al usar Storyboard con iOS 5 (6)
@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 iconos de salida y respuesta encima del ícono de la batería. Desde allí, puede adjuntarlos a las colecciones
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 intento 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!
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)
3) Conecte sus artículos con leftBarButtonItemsCollection
o rightBarButtonItemsCollection
colección de salida de UINavigationItem
Hombre, intenta esto!
self.navigationItem.rightBarButtonItems = @[self.editButtonItem, spacer, b];
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:
o en la descripción textual mostrada a la izquierda:
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.
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.
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
y el resultado en el simulador