Essayer de personnaliser mon bouton de retour dans un contrôleur de navigation en profondeur.
Sur mon contrôleur de vue unique, j'ai un bouton Ajouter dans lequel le code génère par programme une nouvelle variable UIViewController
:
- (void)add:(id)sender
{
MyAddViewController *addController = [[MyAddViewController alloc] initWithNibName:@"MyAddViewController" bundle:nil];
[self.navigationController pushViewController:addController animated:YES];
[addController release];
}
Cela fonctionne et lorsque je clique sur le bouton Ajouter, il se glisse dans la nouvelle vue. Dans la méthode viewDidLoad
de MyAddViewController.m
, j'ai:
self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil] autorelease];
Mais ça ne marche pas. Le bouton Précédent du contrôleur de navigation reste le titre du contrôleur de la vue précédente sur la pile. Il semble que cette ligne ne fait rien. Ai-je manqué quelque chose?
Merci
Cela ne fonctionnera que sur chaque enfant après le viewController qui a self.navigationItem.backBarButtonItem
.
self.navigationItem.backBarButtonItem
est pour le bouton de retour qui apparaît sur la vue poussée par le contrôleur de vue. Vous devez donc déplacer cette ligne vers le contrôleur de vue précédent.
Vous confondez la backBarButtonItem
et la leftBarButtonItem
. Dans UINavigationItem
docs on backBarButtonItem
:
Lorsque cet élément est l'élément arrière du fichier barre de navigation — quand c'est le prochain item en-dessous de l'article le plus haut - cela peut être représenté comme un bouton de retour sur le barre de navigation. Utilisez cette propriété pour spécifiez le bouton retour. La cible et action de l’élément de bouton de barre arrière vous définissez devrait être nul. Le défaut valeur est un élément de bouton de barre affichant le titre de l'élément de navigation.
Donc, si vous deviez changer:
self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil] autorelease];
À:
self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil] autorelease];
Je crois que vous obtiendrez l'effet souhaité.
Vous ne pouvez pas remplacer la backBarButtonItem
, mais vous pouvez utiliser la leftBarButtonItem
pour la remplacer. Mais pour que le nouveau bouton fonctionne de la même manière que le bouton Précédent, vous devez définir la cible et l’action du nouveau bouton, comme suit:
- (void)dismissMyView {
[self.navigationController popViewControllerAnimated:YES];
}
- (void)viewDidLoad {
[super viewDidLoad];
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]
initWithTitle:@"Quit" style: UIBarButtonItemStyleBordered
target:self action:@selector(dismissMyView)];
}
Si ViewController A pousse ViewController B pendant ce temps, nous voulons définir le titre du bouton de barre arrière, nous devons définir "self.navigationItem.backBarButtonItem = ..". S'il était défini dans ViewController B, cela ne fonctionnerait pas comme nous le voudrions.