无法更改导航项后退按钮的文本

Posted

技术标签:

【中文标题】无法更改导航项后退按钮的文本【英文标题】:Can't change text of navigation item back button 【发布时间】:2016-05-23 22:53:20 【问题描述】:

我想在导航栏上隐藏后退按钮的文字,所以发现了过去的问题,例如:UINavigationBar Hide back Button Text

但是,我根本无法更改文本,无论是通过使用情节提要还是在代码中。 请参阅下面的屏幕截图以尝试使用情节提要对其进行更改:

或者,如果我尝试通过将以下内容添加到推送视图控制器的 viewDidLoad 以编程方式进行操作

 self.navigationItem.backBarButtonItem?.title = "stuff"

它没有效果,将同一行代码移动到执行推送的视图控制器也没有。

为什么不管我如何改变它都不会改变? 怎么用storyboard,可以设置导航项标题,却不能设置后退按钮文字?

如果我将以下内容添加到推送的视图控制器中,那么我可以更改文本:

UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.clearColor()], forState: UIControlState.Normal)
UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.clearColor()], forState: UIControlState.Highlighted)

但我想了解为什么其他尝试改变它的方法都没有任何效果

【问题讨论】:

【参考方案1】:

后退按钮的标题会自动设置为它将返回到的视图控制器的标题。

要做你想做的事,你必须隐藏后退按钮并用你自己的图像插入你自己的按钮。

烦人 == @YES。

【讨论】:

【参考方案2】:

正如 Brett 上面提到的,必须创建一个新的条形按钮来更改文本。

要设置后退按钮的标题,试试下面的代码:

self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Stuff" style:UIBarButtonStylePlain target:nil action:nil];

或者通过在导航栏中添加一个条形按钮项来在情节提要中制作它。

【讨论】:

【参考方案3】:

当涉及从 tabBarController 到普通导航控制器时,在实现 backBarItem 时总是很容易混淆。

诀窍在于 backBarItem 属于哪个控制器。如果我们从控制器A导航到控制器B,那么backBarItem,也就是出现在控制器B导航栏上的后退按钮,实际上是属于控制器A的,所以我们只需要找到合适的控制器来编辑backBarItem即可。

解决方案1.在控制器A中,设置backBarButton self.tabBarController?.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .done, target: self, action: nil)

   //M: In controller A
    override func viewDidLoad() 
        super.viewDidLoad()
        
        self.tabBarController?.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .done, target: self, action: nil)
    

解决方案 2. 我们可以在控制器 B 中使用自定义的 leftBarButton 来覆盖控制器 A 的后退按钮。 navigationItem.leftBarButtonItem = UIBarButtonItem(title: "<", style: .done, target: self, action: #selector(tapBackButton)),然后设置leftBarButton的动作回到上一个控制器。

    //M: in Controller B   
    override func viewDidLoad() 
        super.viewDidLoad()
        
        //M: Hide the default back button.
        //M: backBarItem will be covered by the leftBarItem anyway, here is to add an extra handling.
        navigationItem.hidesBackButton = true
        
        //M: Customize a leftBarButton.
        navigationItem.leftBarButtonItem = UIBarButtonItem(title: "   < ", style: .done, target: self, action: #selector(tapBackButton))
        
        //M: Customize the color and font size to the leftBarButton
        navigationItem.leftBarButtonItem?.setTitleTextAttributes([NSAttributedString.Key.foregroundColor: UIColor.white, NSAttributedString.Key.font : UIFont.boldSystemFont(ofSize: 25)], for: .normal)
    
    
    //M: Set the action of the leftBarButton to go back.
    @objc func tapBackButton(_ sender:Any)
        self.navigationController?.popToRootViewController(animated: true)
    

【讨论】:

以上是关于无法更改导航项后退按钮的文本的主要内容,如果未能解决你的问题,请参考以下文章

更改导航栏后退按钮的粗细

更改导航项后退按钮标题

如何更改后退按钮上的文本?

无法更改导航栏后退按钮的背景图像[重复]

更改后退导航栏按钮的字体

无法更改后退栏按钮文本