Durante la navigazione verso qualsiasi vista in un'app che ha il controller di navigazione implementato, mostra un pulsante indietro per andare alla precedente vista. C'è un modo per utilizzare un'immagine personalizzata al posto di quella predefinita?Come posso mostrare un'immagine personalizzata nel pulsante indietro della barra di navigazione invece dei pulsanti predefiniti che sono indicati dalla barra di navigazione stessa
risposta
Sì, è possibile.
È possibile controllare come il pulsante indietro di serie sarà quando un altro controller di vista è spinto sulla cima di un dato controller della vista impostando barra posteriore elemento pulsante del suo elemento di navigazione (è possibile personalizzare il titolo o utilizzare un'immagine):
UIBarButtonItem *btn = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:nil action:nil];
self.navigationItem.backBarButtonItem = btn;
[btn release];
UIBarButtonItem *btn = [[UIBarButtonItem alloc] initWithImage:yourImage style:UIBarButtonItemStyleBordered target:nil action:nil];
self.navigationItem.backBarButtonItem = btn;
[btn release];
Nota: si configura questa in un controller di vista "padre" che può avere altri controller della vista (s) spinto su di esso. La configurazione viene eseguita in "parent" e l'aspetto del pulsante Indietro viene modificato quando alcuni controller di visualizzazione sono in primo piano. Toccando il pulsante indietro ti riporti come previsto.
È inoltre possibile creare il proprio UIBarButtonItem e impostarlo come il leftButtonItem sulla barra di navigazione sulla corrente controller della vista:
UIBarButtonItem *btn = [[UIBarButtonItem alloc] initWithImage:yourImage style:UIBarButtonItemStyleBordered target:self action:@selector(yourMethod:)];
self.navigationItem.leftBarButtonItem = btn;
[btn release];
Nota: in questo caso, la barra posteriore/sinistra l'elemento del pulsante viene modificato per il controller della vista corrente (quando è in alto). È necessario implementare il metodo yourMethod:
. Se vuoi semplicemente che il pulsante torni indietro, devi gestire personalmente il controller di visualizzazione chiamando [self.navigationController popViewControllerAnimated:YES];
.
Ho trovato che nessuna delle soluzioni in realtà risolto il BACK UIBarButton e ha anche fornito il suo comportamento nascosto se il controller di visualizzazione è root.
-(void)popViewControllerWithAnimation {
[self.navigationController popViewControllerAnimated:YES];
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
if([self.navigationController.viewControllers objectAtIndex:0] != self)
{
UIButton *backButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 26, 26)];
[backButton setImage:[UIImage imageNamed:@"back"] forState:UIControlStateNormal];
[backButton setShowsTouchWhenHighlighted:TRUE];
[backButton addTarget:self action:@selector(popViewControllerWithAnimation) forControlEvents:UIControlEventTouchDown];
UIBarButtonItem *barBackItem = [[UIBarButtonItem alloc] initWithCustomView:backButton];
self.navigationItem.hidesBackButton = TRUE;
self.navigationItem.leftBarButtonItem = barBackItem;
}
}
Funziona quasi come un pulsante indietro. Ad eccezione dell'animazione di transizione (dopo che il pulsante è stato toccato e la vista corrente è saltata fuori dalla navigazione a destra).
Il modo giusto è creare una categoria.
@interface UINavigationBar (MyNavigationBar)
-(void)drawRect:(CGRect)rect;
@end
@implementation UINavigationBar (MyNavigationBar)
-(void)drawRect:(CGRect)rect {
UIImage *image = [UIImage imageNamed:@"....."];
[image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];