2

Je ne suis pas sûr de ce que je manque ici. J'ai une coutume UINavigationController et j'essaye d'ajouter un UIBarButtonItem persistant à la barre.Ajout de UIBarButtonItem à UINav..Controller

 
-(void)viewDidLoad 
{ 
    self.navigationBar.barStyle = UIBarStyleBlack; 
    UIBarButtonItem *bbi = [[UIBarButtonItem alloc] initWithTitle:@"Nope..." 
       style:UIBarButtonItemStyleBordered 
       target:self 
       action:@selector(goBack:)]; 
    self.navigationItem.leftBarButtonItem =bbi; 
    [bbi release]; 
} 
-(void)goBack:(id)sender 
{ 
    NSLog(@"go back now"); 
} 

Que manque-t-il ici? - BTW, je ne veux pas/ne pas utiliser IB.

MISE À JOUR: Actuellement, c'est le plus proche que je peux obtenir:

 
-(void)viewDidLoad 
{ 
    self.navigationBar.barStyle = UIBarStyleBlack; 
    UINavigationBar *navBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 20, 320, 44)]; 
    navBar.barStyle = UIBarStyleBlack; 
    UINavigationItem *navItem = [[UINavigationItem alloc] initWithTitle:@"Currently Playing..."]; 
    [navBar pushNavigationItem:navItem animated:NO]; 
    UIBarButtonItem *editButton = [[UIBarButtonItem alloc] initWithTitle:@"Close" style:UIBarButtonItemStyleBordered target:self action:@selector(goBack:)]; 
    navItem.rightBarButtonItem = editButton; 

    [self.view addSubview:navBar]; 

    [editButton release]; 
    [navItem release]; 
    [navBar release]; 
    [super viewDidLoad]; 
} 

Il est terrible que je dois ajouter une barre de navigation entière à un UINavigationController qui a déjà une barre de navigation .... si je tente d'utiliser la existant, j'obtiens cette erreur:

 
'NSInternalInconsistencyException', reason: 'Cannot call pushNavigationItem:animated: directly on a UINavigationBar managed by a controller.' 

.... vraiment ???

+0

alors que se passe-t-il? Voyez-vous votre UINavigationController mais il n'a pas le bouton de la barre personnalisée? Avez-vous mis une pause dans la méthode ci-dessus et il est appelé? Vous l'avez traversé et non des références d'objet sont nil? Vous êtes passé par la méthode qui appelle cette méthode et vous pouvez voir que la barre de navigation est correctement installée? – stefanB

+0

Le débogueur montre qu'il est bien là, mais l'affichage réel n'a rien. Pour ce que ça vaut, la barre est noire, comme déclarée. – mlecho

+0

Mettez votre code supérieur dans votre contrôleur de vue racine, pas dans votre UINavigationController. En outre, la raison de votre erreur dans le second cas est que vous ne poussez pas les barres de navigation comme ça. Lorsque vous utilisez des contrôleurs de navigation, vous placez de nouveaux contrôleurs de vue sur la pile des contrôleurs de navigation. Ces nouveaux contrôleurs de vue personnalisent ensuite leurs éléments de navigation selon les besoins. –

Répondre

21

navigationItem ne doit pas être défini sur l'instance UINavigationController mais sur le contrôleur de vue de la vue qui est affichée "à l'intérieur" du contrôleur de navigation.

La définition de self.navigationItem sur votre contrôleur de navigation fonctionnerait si votre contrôleur était lui-même poussé dans un autre contrôleur de navigation.