2010-05-17 6 views
10

J'ai ajouté une barre de navigation à un UIViewController. Il est affiché à partir d'un autre UIViewController uniquement. J'aimerais avoir un bouton de retour sur le côté gauche qui a la forme d'une flèche, tout comme le bouton de retour normal de la barre de navigation. Il semble que je peux seulement ajouter un bouton de barre à travers IB. Je devine que le bouton de retour doit être ajouté par programme. Des suggestions sur la façon dont je devrais faire cela?Ajout du bouton de retour à la barre de navigation

Actuellement, dans le RootController, je pousse un autre UIViewController (viewB) en faisant simplement un addSubView. Dans viewB, je veux afficher la barre de navigation. L'application est basée sur la vue et non sur le contrôleur de navigation.

Répondre

13

Si vous utilisez un contrôleur de navigation:

MyViewController *_myViewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil]; 
[[self navigationController] pushViewController:_myViewController animated:YES]; 
UIBarButtonItem *_backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleDone target:nil action:nil]; 
self.navigationItem.backBarButtonItem = _backButton; 
[_backButton release], _backButton = nil; 
[_myViewController release], _myViewController = nil; 

Si vous n'êtes pas en utilisant un contrôleur de navigation, regardez dans les Three20 style composants pour faire des boutons de la barre de commande.

+0

Cela ne fait rien. – 4thSpace

+0

Vous devrez l'ajuster au code de votre projet particulier. Vous pouvez modifier votre question pour inclure des extraits de code pertinents, où vous êtes dans votre premier contrôleur de vue et en appuyant sur votre deuxième contrôleur de vue. –

+0

J'ai mis à jour la question. Merci. – 4thSpace

7

Je l'ai fait de la façon suivante

Dans viewDidLoad Méthode J'ai ce code:

UINavigationBar *navBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 41)]; 
    navBar.delegate = self; 

    UINavigationItem *backItem = [[UINavigationItem alloc] initWithTitle:@"Back"]; 
    [navBar pushNavigationItem:backItem animated:NO]; 
    [backItem release]; 

    UINavigationItem *topItem = [[UINavigationItem alloc] initWithTitle:@"Your Title"]; 
    [navBar pushNavigationItem:topItem animated:NO]; 
    topItem.leftBarButtonItem = nil; 
    [topItem release]; 

    [self.view addSubview:navBar]; 
    [navBar release]; 

ajouter ensuite la conformité au protocole UINavigationBarDelegate dans l'en-tête et mettre en œuvre la méthode déléguée de cette façon:

- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item 
{ 
    //if you want to dismiss the controller presented, you can do that here or the method btnBackClicked 

    return NO; 
} 
+0

l'avez-vous utilisé dans une application que vous avez envoyée à Apple? Si oui, l'ont-ils approuvé? – viplezer

+0

Oui, aucune API privée n'est utilisée dans cette approche –

0

Une autre approche pour résoudre ce problème consiste à définir la propriété items pour la barre de navigation au lieu de pousser les éléments de la barre dans le nav pile de barres:

//Define myFrame based on your needs 
let navigationBar = UINavigationBar(frame: myFrame) 
let backItem = UINavigationItem(title: "Back") 
let topItem = UINavigationItem(title: "My Title") 
navigationBar.setItems([backItem,topItem], animated: false)