2009-05-31 12 views

Respuesta

2

la barra de navegación es una UIView por lo que puede simplemente crear un UIButton regular y agregarlo a su barra de navegación como una subvista.

Establezca el marco relativo a la barra de navegación. Si desea que se vea exactamente como el botón incorporado, probablemente tendrá que producir los gráficos usted mismo ya que no están expuestos al SDK AFAIK.

+0

significa esto realmente funciona? He intentado esto sin luc _viewTypeButton = [[UIButton alloc] initWithFrame: CGRectMake (0,0,20,20)]; _viewTypeButton.titleLabel.text = @ "R"; [self.navigationController.navigationBar addSubview: _viewTypeButton]; k. – roocell

4

Mi sugerencia sería no implementar la funcionalidad Agregar como un botón en la barra de navegación. Supongo que está tratando con una vista de tabla de los elementos a continuación, por lo que una forma de manejar esta interacción del usuario es mostrar una opción "Agregar nuevo elemento" como la última entrada en su vista de tabla. Esto podría ser desvaneció mediante programación en cuando el usuario pulsa en el botón Editar en la barra de navegación mediante la aplicación del método siguiente delegado:

- (void)setEditing:(BOOL)editing animated:(BOOL)animated 
{ 
    [super setEditing:editing animated:animated]; 
    [self.tableView beginUpdates]; 
    [self.tableView setEditing:editing animated:YES]; 

    if (editing) 
    { 
     NSIndexPath *indexPath = [NSIndexPath indexPathForRow:[objects count] inSection:0]; 
     [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];   
    } 
    else 
    { 
     NSIndexPath *indexPath = [NSIndexPath indexPathForRow:[objects count] inSection:0];  
     [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];   
    } 
    [self.tableView endUpdates]; 
} 

A continuación, tendría que asegurarse de que la fila adicional se explica por el aumento del recuento de filas utilizando el siguiente:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    if (tableView.editing) 
     return ([objects count] + 1); 
    else 
     return [objects count];  
} 

y luego mostrando el signo más verde a su izquierda, en contraposición con el estilo normal de edición de eliminación:

- (UITableViewCellEditingStyle)tableView:(UITableView *)aTableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (self.editing == NO || !indexPath) return UITableViewCellEditingStyleNone; 
    if (indexPath.row >= [objects count]) 
     return UITableViewCellEditingStyleInsert; 
    else 
     return UITableViewCellEditingStyleDelete; 

    return UITableViewCellEditingStyleNone; 
} 

Por supuesto, deberá proporcionarle un nombre en su cellForRowAtIndexPath: implementación y manejar su selección de filas, también.

36

He aquí un ejemplo de cómo puede agregar dos botones como el botón de la barra derecha. El código siguiente crea un segmentedcontrol contiene botones arriba y abajo de flecha, que luego se introducirá como CustomView para rightbarbutton de navegación:

UISegmentedControl* segmentedControl = [[UISegmentedControl alloc] initWithItems:[NSArray array]]; 
    [segmentedControl setMomentary:YES]; 
    [segmentedControl insertSegmentWithImage:[UIImage imageNamed:@"icon-triangle-up.png"] atIndex:0 animated:NO]; 
    [segmentedControl insertSegmentWithImage:[UIImage imageNamed:@"icon-triangle-down.png"] atIndex:1 animated:NO]; 
    segmentedControl.autoresizingMask = UIViewAutoresizingFlexibleWidth; 
    segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar; 
    [segmentedControl addTarget:self action:@selector(segmentedAction:) forControlEvents:UIControlEventValueChanged]; 

    UIBarButtonItem * segmentBarItem = [[UIBarButtonItem alloc] initWithCustomView: segmentedControl]; 
    self.navigationItem.rightBarButtonItem = segmentBarItem; 
+0

Esto me ayudó mucho. ¡Gracias! :) –

+0

Realmente ayuda mucho. Simplemente no sé por qué no fue aceptado. – camilo

+0

Esto no es precisamente lo que tenía en mente cuando quise poner dos botones en el lado derecho de mi propia aplicación, pero es mucho más limpio codificar y ejecutar que las diversas formas en que la gente ha pirateado para lograrlo que yo ' Lo tomaré sobre la imagen original que tenía en mente. – baudot

2

Si usted quiere tener dos botones separados como el rightBarButtonItem puede hacerlo mediante la adición de un UIToolbar como vista personalizada para el elemento de la barra derecha:

/************************************************* 
     CREAT TWO RIGHT BAR BUTTON ITEMS 
    *************************************************/ 
    // create a toolbar to have two buttons in the right 
    UIToolbar* customToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 90, 44.01)]; 

    // create the array to hold the buttons, which then gets added to the toolbar 
    NSMutableArray* rightBarButtonArray = [[NSMutableArray alloc] initWithCapacity:2]; 

    //Add the info button to the array 
    UIButton* infoViewButton = [[UIButton buttonWithType:UIButtonTypeInfoLight] retain]; 
    [infoViewButton addTarget:self action:@selector(showInfoView) forControlEvents:UIControlEventTouchUpInside]; 
    UIBarButtonItem *infoItem = [[UIBarButtonItem alloc] initWithCustomView:infoViewButton]; 
    [rightBarButtonArray addObject:infoItem]; 
    [infoItem release]; 

    //Add the Done Button to the array 
    UIBarButtonItem *bbi; 
    bbi = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone 
                 target:self 
                 action:@selector(create:)]; 

    [rightBarButtonArray addObject:bbi]; 
    [bbi release]; 

    //add the array to the custom toolbar 
    [customToolbar setItems:rightBarButtonArray animated:NO]; 
    [rightBarButtonArray release]; 

    // and finally add the custom toolbar as custom view to the right bar item 
    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:customToolbar]; 
    [customToolbar release]; 
2

Aquí es el más sencillo, la respuesta de 2 líneas:

Paso 1: Crear una punta para la vista personalizada w/cualquier contenido que desee

Paso 2: Agregar la punta de la barra de herramientas como una vista personalizada:

NSArray *subviewArray = [[NSBundle mainBundle] loadNibNamed:@"TwoButtonView" owner:self options:nil]; 
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:[subviewArray objectAtIndex:0]]; 
68

Esto se incluye ahora en iOS 5 y se llama rightBarButtonItems, observe el plural

He aquí el texto de la apple docs:

rightBarButtonItems

Una serie de elementos de botón de barra personalizada para disp coloque en el lado derecho de la barra de navegación cuando el receptor es el elemento de navegación superior.

@property (no atómica, copiar) NSArray * rightBarButtonItems

Discusión

Esta matriz puede contener 0 o más elementos de los botones de barras para mostrar en el lado derecho de la barra de navegación
. Los elementos se muestran de derecha a izquierda en el mismo orden en que aparecen en la matriz . Por lo tanto, el primer elemento de la matriz es el elemento situado más a la derecha y se agregan otros elementos a la izquierda del elemento anterior.

no Si no hay suficiente espacio para mostrar todos los elementos de la matriz, los que solapar el título de la vista (si existe) o los botones en el lado izquierdo de la barra están
muestra.

El primer elemento de la matriz también se puede establecer utilizando la propiedad RightBarButtonItem.

declarados en UINavigationBar.h

Aquí es cómo he implementado un icono de búsqueda y un icono de edición en el lado derecho de la barra de navegación:

UIBarButtonItem *searchButton   = [[UIBarButtonItem alloc] 
             initWithBarButtonSystemItem:UIBarButtonSystemItemSearch 
             target:self 
             action:@selector(searchItem:)]; 

UIBarButtonItem *editButton   = [[UIBarButtonItem alloc] 
             initWithBarButtonSystemItem:UIBarButtonSystemItemEdit 
             target:self action:@selector(editItem:)]; 

self.navigationItem.rightBarButtonItems = 
[NSArray arrayWithObjects:editButton, searchButton, nil]; 
+1

Se olvidó completamente esto en las notas de la versión. ¡Gracias! –

+0

¡Ya lo hice hasta que alguien de SO me avisó! – jroyce

+0

+1 Gracias por tomarse el tiempo para actualizar esta publicación anterior. Ayudó mucho. – iwasrobbed

0

Para mostrar botones independientes (en lugar de botones de control segmentados):

// create a toolbar to have two buttons in the right 
UIToolbar* tools = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 133, 44.01)]; 

// create the array to hold the buttons, which then gets added to the toolbar 
NSMutableArray* buttons = [[NSMutableArray alloc] initWithCapacity:3]; 

// create a standard "add" button 
UIBarButtonItem* bi = [[UIBarButtonItem alloc] 
initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:NULL]; 
bi.style = UIBarButtonItemStyleBordered; 
[buttons addObject:bi]; 

// create a spacer 
bi = [[UIBarButtonItem alloc] 
initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]; 
[buttons addObject:bi]; 

// create a standard "refresh" button 
bi = [[UIBarButtonItem alloc] 
initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(refresh:)]; 
bi.style = UIBarButtonItemStyleBordered; 
[buttons addObject:bi]; 

// stick the buttons in the toolbar 
[tools setItems:buttons animated:NO]; 

// and put the toolbar in the nav bar 
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:tools]; 
0

Lo puedes hacer desde m Interface Builder. Lo que hice en mi aplicación: simplemente agregué UIView en el ítem izquierdo de la barra de navegación y coloqué 3 botones en esta vista y conecté su acción. Puede seguir esto para agregar más de un botón en el elemento de navegación izquierda/derecha.

refirió: Toolbar items in sub-nib

enter image description here

0

si alguien está pasando, aquí está la respuesta rápida:

let barButton_array: [UIBarButtonItem] = [Button1, Button2] 
navigationItem.setRightBarButtonItems(barButton_array, animated: false) 
Cuestiones relacionadas