2009-09-12 2 views
15

Ho provato questo approccio/trucco: http://blog.blackwhale.at/2009/06/uibuttons-in-uinavigationbar/Come si aggiunge più di un UIBarButton su UINavigationItem.rightBarButtonItem (o leftBarButtonItem)?

Il problema è questo lascia una cucitura debole. Ho provato a impostare l'immagine di sfondo della barra degli strumenti nidificata su un'immagine che ho catturato di ciò che dovrebbe essere. Non ha funzionato. L'immagine non è stata applicata. Ho anche provato a usare una UINavigationBar nidificata e non sembra funzionare.

Ho visto questo fatto in diverse app per iPhone. Qualcuno sa come?

[EDIT] Desidero che i pulsanti assomiglino ai normali UIBarButtonItem e siano in grado di utilizzare stili di sistema come UIBarButtonSystemItemAdd, UIBarButtonSystemItemRefresh. Il collegamento che ho fornito lo fa eccetto che puoi vedere una debole giuntura perché è un UIToolbar annidato nella barra di navigazione ..

Per favore non menzionare questo rompendo le Linee guida dell'interfaccia umana. (Sappiamo).

Apprezzo che tu abbia contribuito con i tuoi hack ... questo è l'unico modo per farlo!

+0

Il link che hai citato è giù :-( –

risposta

6

per sbarazzarsi dello sfondo ('seam') di una UIToolbar, creare una sottoclasse di UIToolbar e sovrascrivere il metodo rect (void) drawRect: (CGRect). Lascia vuoto e la tua UIToolbar non avrà più uno sfondo.

L'ho usato solo nel mio progetto e ha funzionato alla grande. Ho trovato questo nei commenti di: http://osmorphis.blogspot.com/2009/05/multiple-buttons-on-navigation-bar.html

+2

FYI, iOS 5.0 supporta più pulsanti della barra di navigazione. Vedere la risposta che ho postato qui sotto. Tuttavia, se è necessario distribuire per versioni precedenti del sistema operativo, sarà comunque necessario utilizzare la tecnica descritta in questa risposta. –

2

vedi esempio uicatalogue disponibile sul sito di Apple per libero ... hanno usato il controllo uisegmented per mostrare tre pulsanti al posto di tasto destro sulla barra barra navigaion ...

+0

Mi dispiace non sto cercando un controllo di segmento Voglio i pulsanti standard come + (aggiungi pulsante), Modifica, aggiorna icona e così via. – Cal

+0

puoi aggiungere una visualizzazione personalizzata con i pulsanti desiderati ... cerca google per il codice di visualizzazione personalizzato..tuoi essere in grado di ottenerlo –

+0

ci sono molti tutorial in rete per fare questo.se hai provato a postare il tuo codice –

3
UIView *parentView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, myWidth, myHeight)]; 
// make UIView customView1... (UILabel, UIButton, etc.) with desired frame and settings 
[parentView addSubview:customView1]; 
[customView1 release]; 
// make UIView customView2... (UILabel, UIButton, etc.) with desired frame and settings 
[parentView addSubview:customView2]; 
[customView2 release]; 
UIBarButtonItem *customBarButtomItem = [[UIBarButtonItem alloc] initWithCustomView:parentView]; 
[parentView release]; 
self.navigationItem.rightBarButtonItem = customBarButtomItem; 
[customBarButtomItem release]; 
+0

Desidero che i pulsanti assomiglino ai normali UIBarButtonItems e siano in grado di utilizzare stili di sistema come UIBarButtonSystemItemAdd, UIBarButtonSystemItemRefresh. Il link che ho fornito lo fa eccetto che puoi vedere una debole giuntura perché è un UIToolbar annidato nella barra di navigazione. – Cal

+0

alex risposta funziona perfettamente per te –

+0

L'ho provato prima e il pulsante sembra diverso. Ma puoi fare uno screenshot del look che vuoi e usarlo nel pulsante. – Cal

0

In iOS 4.x il clearColor sembra non avere alcun effetto sulla UIToolbar, mentre sovrascrive il suo drawRect: did.

36

iOS 5.0 ora supporta più pulsanti. Vedi la documentazione di iOS per UINavigationItem. In particolare, quanto segue:

Proprietà:

@property(nonatomic, copy) NSArray *leftBarButtonItems; 
@property(nonatomic, copy) NSArray *rightBarButtonItems; 
@property BOOL leftItemsSupplementBackButton; 

Metodi:

- (void)setLeftBarButtonItems:(NSArray *)items animated:(BOOL)animated; 
- (void)setRightBarButtonItems:(NSArray *)items animated:(BOOL)animated; 
0

mi si avvicinò con una funzione di supporto che sto usando tutto il mio progetto. Fondamentalmente controlla se c'è già un pulsante sulla barra e se ne aggiunge uno nuovo o lo si unisce con i pulsanti esistenti.Così si può chiamare la funzione solo una volta o più volte:

+ (void)AddButtonToBar:(UIViewController *)controller withImage:(NSString *)imageName withAction:(SEL)action withFrame:(CGRect) frame{ 
    UIButton *newButton =[[UIButton alloc] init]; 
    [newButton setBackgroundImage:[UIImage imageNamed:imageName] forState:UIControlStateNormal]; 
    newButton.frame = frame; 
    [newButton addTarget:controller action:action forControlEvents:UIControlEventTouchUpInside]; 

    if ([[controller.navigationItem rightBarButtonItems] count] == 0) 
     [controller.navigationItem setRightBarButtonItem:[[UIBarButtonItem alloc] initWithCustomView:newButton]]; 
    else { 
     NSMutableArray *existingButtons = [[NSMutableArray alloc] initWithArray:[controller.navigationItem rightBarButtonItems]]; 
     [existingButtons addObject:[[UIBarButtonItem alloc] initWithCustomView:newButton]]; 
     [controller.navigationItem setRightBarButtonItems:(NSArray *)existingButtons]; 
    } 
} 

chiamata dal controller della vista:.

[Helper AddButtonToBar:self withImage:@"imageName.png" withAction:@selector(myAction) withFrame:CGRectMake(0, 0, 24, 24)];