首页 文章

更改UINavigationBar后退按钮 Headers

提问于
浏览
31

在我的应用程序中,我想使用'Back'文本作为每个viewcontroller的后退按钮 Headers . 我已经在stackoverflow上阅读了这么多帖子但什么也没得到 .

我不想设置leftbarbuttonitem .

任何人都可以帮我完成这个简单的任务 .

谢谢,

11 回答

  • 1
    self.navigationController.navigationBar.topItem.title = @"";
    
  • 0

    在父视图控制器中执行此操作,而不是在子视图中

    Swift

    navigationItem.backBarButtonItem = UIBarButtonItem(title: "Back", style: .plain, target: nil, action: nil)
    

    Objetive-C

    self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
    
  • 88

    如果您使用的是故事板,则可以在父视图控制器中选择导航项,并在“ Back Button ”字段中设置所需的按钮文本 . 请记住在 parent 视图控制器中设置此项,而不是在推送的子项中 .

    enter image description here

  • 8

    试试这个希望它会起作用

    UIBarButtonItem *btn = 
            [[UIBarButtonItem alloc] initWithTitle:@"New Title" 
                                             style:UIBarButtonItemStyleBordered 
                                            target:nil 
                                            action:nil];
    [[self navigationItem] setBackBarButtonItem:btn];
    
  • 3

    我需要使用 self.navigationController.navigationBar.backItem.title = @""; ,区别在于我使用 backItem 而不是 topItem .

  • 5
    navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
    
  • 34

    swift 2.0:

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        self.navigationController?.navigationBar.topItem?.title = ""
    }
    

    注意:仅当storyboard具有一系列导航堆栈时才有效 .

    其他选项/更改 Headers :

    self.navigationController?.navigationBar.backItem?.title = ""
    navigationItem.backBarButtonItem?.title = ""
    navigationItem.leftBarButtonItem?.title = ""
    

    删除navigationItem:

    navigationItem.setLeftBarButtonItem(nil, animated: true)
    
  • -1

    AppDelegateDidFinishLaunchingWithOptions 添加此代码:

    [[UIBarButtonItem appearance] 
    setBackButtonTitlePositionAdjustment:UIOffsetMake(-1000.0, 0.0) 
    forBarMetrics:UIBarMetricsDefault];
    
  • 1

    更改当前可见的后退按钮

    extension UIViewController {
    func setCurrentBackButton(title: String) {
        guard let vcCount = self.navigationController?.viewControllers.count else {
            return
        }
    
        let priorVCPosition = vcCount - 2
    
        guard priorVCPosition >= 0 else {
            return
        }
    
        self.navigationController?.viewControllers[priorVCPosition].navigationItem.backBarButtonItem = UIBarButtonItem(title: title, style: .plain, target: self, action: nil)
    }
    
  • -1

    要删除所有视图控制器的后退按钮 Headers ,请添加新的swift文件并将此消息复制到它

    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()
        }
    
    
    }
    

    在AppDelegate里面的didFinishLaunchingWithOptions之后,调用swizzle func .

    UIViewController.swizzle()
    

    这个func使用目标c运行时将 viewDidLoad 方法与另一个删除后退按钮 Headers 的方法交换,然后在里面调用原来的 viewDidLoad

  • 0

    带后箭头的后退按钮

    Objective-C

    self.navigationController.navigationBar.topItem.backBarButtonItem = 
    [[UIBarButtonItem alloc] initWithTitle:@"Title" style:UIBarButtonItemStylePlain
    target:nil action:nil];
    

    斯威夫特

    self.navigationController?.navigationItem.backBarButtonItem = 
    UIBarButtonItem(title:"Title", style:.plain, target:nil, action:nil)
    

    没有后箭头的普通按钮

    Objective-C

    self.navigationItem.leftBarButtonItem = 
    [[UIBarButtonItem alloc] initWithTitle:@"Title" 
    style:UIBarButtonItemStylePlain target:nil action:nil];
    

    斯威夫特

    self.navigationItem.leftBarButtonItem = UIBarButtonItem(title:"Title", 
    style:.plain, target:nil, action:nil)
    

    没有后箭头的粗体按钮

    Objective-C

    self.navigationItem.leftBarButtonItem = 
    [[UIBarButtonItem alloc] initWithTitle:@"Title" 
    style:UIBarButtonItemStyleDone target:nil action:nil];
    

    斯威夫特

    self.navigationItem.leftBarButtonItem = UIBarButtonItem(title:"Title", 
    style:.done, target:nil, action:nil)
    

相关问题