2009-05-31 22 views

risposta

2

barra di navigazione è un UIView così si può semplicemente creare un regulat UIButton e aggiungerlo alla barra di navigazione come una visualizzazione secondaria.

Imposta il riquadro relativo alla barra di navigazione. Se vuoi che appaia esattamente come il pulsante integrato, probabilmente dovrai produrre la grafica da solo perché non sono esposti all'SDK AFAIK.

+0

fa questo in realtà funziona? Ho provato questo senza luc _viewTypeButton = [[allocazione UIButton] initWithFrame: CGRectMake (0,0,20,20)]; _viewTypeButton.titleLabel.text = @ "R"; [self.navigationController.navigationBar addSubview: _viewTypeButton]; k. – roocell

4

Il mio suggerimento sarebbe quello di non implementare la funzionalità Add come un pulsante nella barra di navigazione. Presumo che tu abbia a che fare con una vista tabella degli elementi di seguito, quindi un modo per gestire questa interazione utente è visualizzare un'opzione "Aggiungi nuovo elemento" come ultima voce nella visualizzazione tabella. Questo potrebbe essere a livello di codice sbiadito quando l'utente tocca il pulsante Modifica nella barra di navigazione implementando il seguente metodo delegato:

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

È quindi avrebbe bisogno di fare in modo che la riga in più si spiega con l'aumento della conta di righe con la seguente:

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

e poi mostra il segno più verde alla sua sinistra, in contrasto con il normale stile di modifica cancellazione:

- (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; 
} 

Ovviamente, dovrai fornire un nome nel tuo cellForRowAtIndexPath: implementazione e gestire anche la sua selezione di righe.

36

Ecco un esempio di come è possibile aggiungere due pulsanti come barra di destra. Il seguente codice crea un segmentedcontrol contenente su e giù tasti freccia, che viene poi aggiunto come CustomView per rightbarbutton di navigazione:

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

Questo mi ha aiutato molto. Grazie! :) –

+0

Aiuta davvero molto. Solo non so perché non è stato accettato. – camilo

+0

Questo non era esattamente quello che avevo in mente quando volevo mettere due pulsanti sul lato destro della mia app, ma è molto più pulito da codificare ed eseguire rispetto ai vari modi in cui le persone hanno hackerato per realizzarlo che io Prenderò l'immagine originale che avevo in mente. – baudot

2

Se si desidera avere due pulsanti separati come il rightBarButtonItem è possibile farlo con l'aggiunta di un UIToolbar come visualizzazione personalizzata per la voce della barra destra:

/************************************************* 
     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

Ecco il davvero semplice, 2 linea di risposta:

Passaggio 1: Creare un pennino per la visualizzazione personalizzata w/qualsiasi contenuto che si desidera

Fase 2: Aggiungi il pennino alla barra degli strumenti come visualizzazione personalizzata:

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

Questo è ora incluso in iOS 5 e si chiama rightBarButtonItems, notare il plurale

Ecco il testo della apple docs:

rightBarButtonItems

Una serie di voci dei tasti barra personalizzata per disp posare sul lato destro della barra di navigazione quando il ricevitore è la voce di navigazione superiore.

@property (nonatomic, copia) NSArray * rightBarButtonItems

Discussione

Questa matrice può contenere 0 o più elementi di pulsante barra per visualizzare sul lato destro della barra di navigazione
. Gli articoli vengono visualizzati da destra a sinistra nello stesso ordine in cui appaiono nell'array . Pertanto, il primo elemento nell'array è l'elemento più a destra e gli altri elementi vengono aggiunti alla sinistra dell'elemento precedente.

non Se non c'è spazio sufficiente per visualizzare tutti gli elementi nella matrice, quelli che sarebbero sovrapporsi la vista del titolo (se presente) oi pulsanti sul lato sinistro della barra sono
visualizzati.

Il primo elemento nell'array può anche essere impostato utilizzando la proprietà rightBarButtonItem.

dichiarata in UINavigationBar.h

Ecco come ho implementato l'icona di ricerca e un'icona Modifica sul lato destro della barra di navigazione:

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

Completamente mancato nelle note di rilascio. Grazie! –

+0

Ya ho fatto anche io fino a quando qualcuno di SO mi ha dato la mancia! – jroyce

+0

+1 Grazie per aver dedicato del tempo ad aggiornare questo vecchio post. Aiutato molto – iwasrobbed

0

Per mostrare tasti indipendenti (invece dei pulsanti di controllo segmentati):

// 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

Si può fare per m Interface Builder. Quello che ho fatto nella mia app - ha appena aggiunto UIView sulla parte sinistra della barra di navigazione e ha posizionato 3 pulsanti in questa vista e ha collegato la loro azione. È possibile seguire questo per aggiungere più di un pulsante nella voce di navigazione sinistra/destra.

refered: Toolbar items in sub-nib

enter image description here

0

se qualcuno che passa, ecco la risposta rapida:

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