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

时间:2016-05-23 22:53:21

标签: ios

我想隐藏导航栏上后退按钮的文字,因此找到了以下问题:UINavigationBar Hide back Button Text

但是我无法通过故事板或代码更改文本。 请参阅下面的屏幕截图,尝试使用故事板进行更改:

enter image description here

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

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

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

无论我如何改变它,它怎么会不改变? 为什么使用故事板,可以设置导航项标题,但不能设置后退按钮文本?

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

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

但我想理解为什么其他尝试改变它的方法都没有任何影响

3 个答案:

答案 0 :(得分:1)

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

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

恼人的== @YES。

答案 1 :(得分:0)

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

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

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

或者通过在导航栏中添加一个条形按钮项目在故事板中创建它。

答案 2 :(得分:0)

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

技巧是关于backBarItem属于哪个控制器。如果从控制器A导航到控制器B,则出现在控制器B导航栏上的后退按钮backBarItem实际上属于控制器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的backButton。 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)
    }