Modifier UINavigationBar retour titre du bouton
dans mon application je veux utiliser le texte' Back ' comme titre de bouton back pour chaque viewcontroller. J'ai lu tellement de billets sur stackoverflow mais je n'ai rien trouvé.
Je ne veux pas mettre leftbarbuttonitem.
quelqu'un Peut m'aider sur cette simple tâche.
Merci,
9 réponses
faites ceci dans le contrôleur de vue parent pas dans l'enfant
Swift
navigationItem.backBarButtonItem = UIBarButtonItem(title: "Back", style: .plain, target: nil, action: nil)
Objectif-C
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationController.navigationBar.topItem.title = @"";
si vous utilisez storyboard, vous pouvez sélectionner l'élément de navigation dans le contrôleur de vue parent et régler le bouton texte que vous voulez dans ' Bouton Arrière' champ. N'oubliez pas de régler cela dans le parent contrôleur de vue, pas dans l'enfant qui est poussé.
Essayez ceci espère qu'il aura du travail
UIBarButtonItem *btn =
[[UIBarButtonItem alloc] initWithTitle:@"New Title"
style:UIBarButtonItemStyleBordered
target:nil
action:nil];
[[self navigationItem] setBackBarButtonItem:btn];
j'ai besoin d'utiliser self.navigationController.navigationBar.backItem.title = @"";
, la différence étant que j'utilise backItem
au lieu de topItem
.
navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
swift 2.0:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationController?.navigationBar.topItem?.title = ""
}
Note: cela ne fonctionne que si le storyboard a une chaîne de pile de navigation.
Autres options/changement de titre:
self.navigationController?.navigationBar.backItem?.title = ""
navigationItem.backBarButtonItem?.title = ""
navigationItem.leftBarButtonItem?.title = ""
Supprimer navigationItem:
navigationItem.setLeftBarButtonItem(nil, animated: true)
AppDelegate
dans le DidFinishLaunchingWithOptions
ajoutez ce code:
[[UIBarButtonItem appearance]
setBackButtonTitlePositionAdjustment:UIOffsetMake(-1000.0, 0.0)
forBarMetrics:UIBarMetricsDefault];
pour supprimer le titre du bouton de retour pour tous les contrôleurs de vue ajouter un nouveau fichier swift et copier cette extension vers lui
import UIKit
extension UIViewController {
static func swizzle(){
let orginalSelector = #selector(viewDidLoad)
let swizzledSelector = #selector(swizzledViewDidLoad)
let orginalMethod = class_getInstanceMethod(UIViewController.self, orginalSelector)
let swizzledMethod = class_getInstanceMethod(UIViewController.self, #selector(swizzledViewDidLoad))
let didAddMethod = class_addMethod(UIViewController.self, orginalSelector, method_getImplementation(swizzledMethod!), method_getTypeEncoding(swizzledMethod!))
if didAddMethod {
class_replaceMethod(UIViewController.self, swizzledSelector, method_getImplementation(orginalMethod!), method_getTypeEncoding(orginalMethod!))
}else{
method_exchangeImplementations(orginalMethod!, swizzledMethod!)
}
}
@objc func swizzledViewDidLoad(){
navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
swizzledViewDidLoad()
}
}
après cela, dans AppDelegate inside didFinishLaunchingWithOptions, appelez le Swizzle func.
UIViewController.swizzle()
c'func utilise le runtime objective-c pour l'échange de la viewDidLoad
méthode à une autre qui supprime le bouton précédent titre et à l'intérieur il rappeler l'original viewDidLoad