Lorsque je crée un bouton de retour personnalisé, j'utilise le code suivant:
UIBarButtonItem *leftButton = [[UIBarButtonItem alloc]initWithTitle:@"Yeah" style:UIBarButtonItemStyleBordered target:self action:@selector(backButtonPressed:)];
self.navigationItem.leftBarButtonItem = leftButton;
Cela fonctionne bien et j'obtiens ce résultat:
J'aurais le même résultat, mais avec une flèche à gauche, comme ceci (quand c'est un bouton de retour standard, pas un bouton personnalisé):
Comment puis-je simplement ajouter cette flèche?
Enfin, voici l'extrait de code que j'utilise pour définir le titre du bouton Précédent avec la flèche vers la gauche standard dans la vue actuelle, et non dans la vue parent:
- (void)viewDidLoad {
[super viewDidLoad];
[self setTitle:@"Current View"];
// Get the previous view controller
UIViewController *previousVC = [self.navigationController.viewControllers objectAtIndex:self.navigationController.viewControllers.count - 2];
// Create a UIBarButtonItem
UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"FooBar" style:UIBarButtonItemStyleBordered target:self action:@selector(yourSelector)];
// Associate the barButtonItem to the previous view
[previousVC.navigationItem setBackBarButtonItem:barButtonItem];
}
Voici le résultat:
Note: Cependant, comme il n'est pas possible d'ajouter une action sur un backBarButtonItem, vous pouvez faire référence à cet excellent post si vous le souhaitez.
Mis à jour pour Swift
// Prev - no chevron...
//navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Back !", style: .plain, target: self, action: #selector(backPressed))
// adds the chevron
let vc = navigationController?.viewControllers.first
let button = UIBarButtonItem(title: "Go Back", style: .plain, target: self, action: #selector(backPressed))
vc?.navigationItem.backBarButtonItem = button
La chose la plus simple à faire est de définir le titre dans le contrôleur parent (c’est-à-dire celui avec lequel vous souhaitez revenir). Si vous ne souhaitez pas que ce titre soit identique au titre affiché dans la vue de ce VC, vous pouvez modifier le titre dans viewWillDisappear en ce que vous voulez sur le bouton Précédent du prochain VC, puis le remettre dans ce que vous voulez parent dans viewWillAppear.
Si vous utilisez des storyboards, vous pouvez également définir le titre du titre directement dans IB.
Enfin, pour créer un bouton de retour personnalisé, vous pouvez faire quelque chose comme:
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"Details" style:UIBarButtonItemStyleBordered target:nil action:nil];
... veillez simplement à le faire dans le contrôleur de présentation (ou parent), et non dans le contrôleur de vue chargé (le contrôleur présenté).
UIButton * backButton = [UIButton buttonWithType:UIButtonTypeCustom];
[backButton addTarget:self action:@selector(popViewController) forControlEvents:UIControlEventTouchUpInside];
[backButton setFrame:FRAME_DEFINE
[backButton setContentHorizontalAlignment:UIControlContentHorizontalAlignmentLeft];
[backButton setExclusiveTouch:YES];
[backButton setImage:[UIImage imageNamed:BACK_BUTTON_DEFAULT_ICON] forState:UIControlStateNormal];
[backButton setTitle:@"BACK" forState:UIControlStateNormal];
[backButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
UIBarButtonItem *backMenuBarButton = [[UIBarButtonItem alloc] initWithCustomView:backButton];
self.navigationItem.leftBarButtonItem = backMenuBarButton;
eh bien, vous devez aller avec une image de fond et avec le titre et
// Creates a back button instead of default behaviour (displaying title of previous screen)
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"back_arrow.png"]
style:UIBarButtonItemStyleBordered
target:self
action:@selector(backAction)];
tipsDetailViewController.navigationItem.leftBarButtonItem = backButton;
[backButton release];
Pour Swift, utilisez la réponse d'Erzekiel comme base pour cela, vous pouvez la simplifier pour -
extension UIViewController {
func setBackButtonTitle(to title: String) {
let barButtonItem = UIBarButtonItem(title: title, style: .plain, target: self, action: nil)
self.navigationItem.backBarButtonItem = barButtonItem
}
}
Cela doit être appelé depuis le viewController parent, par exemple dans viewWillDisappear -
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
self.setBackButtonTitle(to: "Back"))
}
J'utilise un code comme:
UIBarButtonItem *leftBar = [[UIBarButtonItem alloc] init];
leftBar.title = @"Back";//Details
self.navigationController.navigationBar.topItem.backBarButtonItem = leftBar;