无法更改导航项后退按钮的文本
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)
【讨论】:
以上是关于无法更改导航项后退按钮的文本的主要内容,如果未能解决你的问题,请参考以下文章