我想隐藏导航栏上后退按钮的文字,因此找到了以下问题:UINavigationBar Hide back Button Text
但是我无法通过故事板或代码更改文本。 请参阅下面的屏幕截图,尝试使用故事板进行更改:
或者,如果我尝试通过将以下内容添加到推送视图控制器的viewDidLoad来以编程方式执行此操作
self.navigationItem.backBarButtonItem?.title = "stuff"
它没有效果,也没有将同一行代码移动到视图控制器进行推送。
无论我如何改变它,它怎么会不改变? 为什么使用故事板,可以设置导航项标题,但不能设置后退按钮文本?
如果我将以下内容添加到推送的视图控制器中,那么我可以更改文本:
UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.clearColor()], forState: UIControlState.Normal)
UIBarButtonItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.clearColor()], forState: UIControlState.Highlighted)
但我想理解为什么其他尝试改变它的方法都没有任何影响
答案 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)
}