Personalizzato UINavigationBar del backButton?

Sto facendo un app per iPhone che permette all’utente di tornare indietro in UINavigationBar. Tuttavia, il loro aspetto è orrendo. Sto cercando di personalizzarlo con la mia immagine (meno il default UIBarButtonItem sfondo). La mia immagine è un mio sfondo personalizzato, ma si può ancora vedere parte del pulsante a sinistra e a destra.

UIBarButtonItem *cancelButton = [[[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"back_button_normal.png"] style:UIBarButtonItemStylePlain target:self   action:@selector(cancel:)] autorelease];
self.navigationItem.leftBarButtonItem = cancelButton;  

C’è un modo per rimuovere questo spazio? C’è una possibilità che posso usare un UIButton così posso personalizzare completamente? Ho fatto qualcosa in interface builder dove ho trascinato un UIButton in UINavigationBar del rightButton e funziona perfettamente. C’è qualche cosa che posso fare a livello di programmazione?

Grazie!

Ecco come appare:

Personalizzato UINavigationBar del backButton?

EDIT #1:

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button addTarget:self action:@selector(cancel:) forControlEvents:UIControlEventTouchDown];
[button setTitle:@"Show View" forState:UIControlStateNormal];
[button setBackgroundImage:[UIImage imageNamed:@"back_button_normal.png"] forState:UIControlStateNormal];

UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:button];
[self.navigationItem setLeftBarButtonItem:barButtonItem];

Ecco come faccio il mio sfondo per il UINavigationBar (posti RootViewController):

@implementation UINavigationBar (UINavigationBarCustomDraw)

- (void) drawRect:(CGRect)rect {

[self setTintColor:[UIColor colorWithRed:0.85f green: 0.85f blue:0.85f alpha:1]];

if ([self.topItem.title length] > 0 && ![self.topItem.title isEqualToString:@"Back to ..."]) {
    [[UIImage imageNamed:@"UINavigationBar_background.png"] drawInRect:rect];

    CGRect frame = CGRectMake(0, 0, 320, 44);
    UILabel *label = [[[UILabel alloc] initWithFrame:frame] autorelease];
    [label setBackgroundColor:[UIColor clearColor]];
    label.font = [UIFont boldSystemFontOfSize: 20.0];
    label.shadowColor = [UIColor colorWithWhite:0.0 alpha:1];
    label.textAlignment = UITextAlignmentCenter;
    label.textColor = [UIColor whiteColor];
    label.text = self.topItem.title;
    self.topItem.titleView = label;

} else {
    [[UIImage imageNamed:@"login_button.png"] drawInRect:rect];
    self.topItem.titleView = [[[UIView alloc] init] autorelease];
}
}

@end

OriginaleL’autore iosfreak | 2011-05-14

3 Replies
  1. 11

    Se si desidera aggiungere UIButton alla barra di navigazione via obj-c, il codice dovrebbe essere simile a questo:

    UIButton *button = /* initialize your button */
    
    UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:button];
    [self.navigationItem setLeftBarButtonItem:barButtonItem];
    no '-button' method found su questa linea: UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] button];
    Scusate, ho mangiato un pezzo di codice 🙂 a Cura.
    Grazie! L’azione ha quindi so che c’è… Ma per qualche motivo non riesco a vedere… Magari è dietro il bar o qualcosa del genere? Tutte le idee? Grazie per il vostro aiuto.
    Hmmm. Nella mia risposta ho scritto setRightBarButtonItem… hai sostituirlo con setLeftBarButtonItem metodo?
    Sì, cambia qualcosa? Ho voluto questo per sostituire il mio di default backButton.Ho aggiunto il codice per la mia domanda di come ho fatto il mio pulsante.

    OriginaleL’autore akashivskyy

  2. 14

    Combinato le due risposte e aggiunto il Pulsante Indietro Funzionalità

    //Custom Navigation Bar Back Button
    
    //Create Button
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
    button.frame = CGRectMake(0,0,54,32); //width=54, height=32
    
    //Set Button Image
    NSString *backButtonURL = [[NSBundle mainBundle]pathForResource:@"back" ofType:@"png"];
    UIImage *backButtonImage = [UIImage imageWithContentsOfFile:backButtonURL];
    [button setBackgroundImage:backButtonImage forState:UIControlStateNormal];
    
    //Important: Set Button Action to go back
    [button addTarget:self.navigationController action:@selector(popViewControllerAnimated:) forControlEvents:UIControlEventTouchUpInside];

    OriginaleL’autore James Gwee

  3. 2

    Il problema è che si sta utilizzando UIButtonTypeRoundedRect invece UIButtonTypeCustom. Si potrebbe anche voler utilizzare:

    UIImage *image = [UIImage imageNamed:@"back_button_normal.png"]
    button.frame = CGRectMake(0, 0, image.size.width, image.size.height);

    OriginaleL’autore Jano

Lascia un commento