2009-07-31 11 views

Répondre

18

Oui, vous pouvez.

Vous pouvez contrôler la façon dont le bouton de retour norme regardera quand un autre contrôleur de vue est poussé au-dessus d'un contrôleur de vue donné en réglant le bouton barre arrière de l'élément de navigation de l'article (vous pouvez personnaliser le titre ou utiliser une image):

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

Remarque: vous configurez ceci dans un contrôleur de vue "parent" qui peut avoir d'autres contrôleurs de vue enfoncés au-dessus de celui-ci. La configuration est effectuée dans le "parent" et l'apparence du bouton de retour est modifiée quand un contrôleur de vue est en haut. En appuyant sur le bouton retour vous ramène comme prévu.


Vous pouvez créer votre propre UIBarButtonItem et le définir comme leftButtonItem sur la barre de navigation sur le contrôleur de vue actuel:

UIBarButtonItem *btn = [[UIBarButtonItem alloc] initWithImage:yourImage style:UIBarButtonItemStyleBordered target:self action:@selector(yourMethod:)]; 
self.navigationItem.leftBarButtonItem = btn; 
[btn release]; 

Remarque: dans ce cas, l'arrière/barre de gauche l'élément de bouton est modifié pour le contrôleur de vue en cours (lorsqu'il est en haut). Vous devez implémenter la méthode yourMethod:. Si vous voulez simplement que le bouton revienne, vous devez manipuler vous-même le contrôleur de vue en appelant le [self.navigationController popViewControllerAnimated:YES];.

3

J'ai trouvé qu'aucune des solutions ne résolvait réellement le BACK UIBarButton et fournissait également son comportement caché si le contrôleur de vue était 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; 
    } 
} 
0

Cela fonctionne presque comme un bouton de retour. À l'exception de l'animation de transition (après que le bouton est tapé et la vue actuelle est désactivée de la navigation vers la droite).

La bonne façon est de faire une catégorie.

@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)];