如何删除后退按钮文本。
current back button: <Back
desired back button: <AnythingElse
这些都没有奏效:
self.navigationItem.backBarButtonItem?.title = "Back"
self.backItem?.title = ""
self.navigationController?.navigationBar.backItem?.title = ""
self.navigationItem.backBarButtonItem?.title = ""
self.navigationController?.navigationItem.backBarButtonItem?.title="Back"
self.navigationController?.navigationBar.backItem?.title = ""
self.navigationController?.navigationItem.backBarButtonItem?.title
答案 0 :(得分:531)
后退按钮属于上一个视图控制器,而不是当前在屏幕上显示的控制器
要修改后退按钮,您应该在启动segue的视图控制器上在推送之前更新它:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let backItem = UIBarButtonItem()
backItem.title = "Something Else"
navigationItem.backBarButtonItem = backItem // This will show in the next view controller being pushed
}
斯威夫特3:override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let backItem = UIBarButtonItem()
backItem.title = "Back"
navigationItem.backBarButtonItem = backItem // This will show in the next view controller being pushed
}
答案 1 :(得分:106)
答案 2 :(得分:39)
后退按钮文本取自父视图控制器的导航项标题。因此,无论您在之前的视图控制器的导航项目标题上设置什么,都将显示在当前视图控制器的后退按钮文本上。 您可以在父视图控制器的viewWillAppear方法中将“”作为导航项标题。
self.navigationItem.title = ""
另一种方法是放
self.navigationController?.navigationBar.topItem?.title = ""
在当前视图控制器的viewWillAppear方法中。如果导航堆栈太嵌套,这将导致一些其他问题。
答案 3 :(得分:29)
如果您正在为视图控制器使用xib文件,请在视图控制器类中执行此操作。
class AboutUsViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
edgesForExtendedLayout = []
setUpNavBar()
}
func setUpNavBar(){
//For title in navigation bar
self.navigationController?.view.backgroundColor = UIColor.white
self.navigationController?.view.tintColor = UIColor.orange
self.navigationItem.title = "About Us"
//For back button in navigation bar
let backButton = UIBarButtonItem()
backButton.title = "Back"
self.navigationController?.navigationBar.topItem?.backBarButtonItem = backButton
}
}
结果将是:
答案 4 :(得分:26)
我不知道你在哪里使用过你提出问题的方法,但是如果我使用的话,我可以在我的ViewController
类(我想要更改后退按钮)中获得所需的结果,在viewDidLoad()
函数上,以下行:
self.navigationController?.navigationBar.backItem?.title = "Anything Else"
结果将是:
<强>之前强>
<强>后强>
答案 5 :(得分:25)
您可以将这3行代码放入override func viewDidLoad() {}
。
let backButton = UIBarButtonItem()
backButton.title = "name"
self.navigationController?.navigationBar.topItem?.backBarButtonItem = backButton
答案 6 :(得分:18)
后退按钮属于上一个视图控制器,而不是当前在屏幕上显示的控制器。 要修改后退按钮,您应该在推送之前更新它,添加viewdidload:
斯威夫特4:self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: self, action: nil)
答案 7 :(得分:10)
答案 8 :(得分:8)
这应该有效:
override func viewDidLoad() {
super.viewDidLoad()
var button = UIBarButtonItem(title: "YourTitle", style: UIBarButtonItemStyle.Bordered, target: self, action: "goBack")
self.navigationItem.backBarButtonItem = button
}
func goBack()
{
self.navigationController?.popViewControllerAnimated(true)
}
虽然不建议这样做,因为这实际上取代了backButton,它也删除了后退箭头和滑动手势。
答案 9 :(得分:7)
Swift 4.2
如果您想更改导航栏的后退按钮项文本,请将其放在显示后退按钮的viewDidLoad
之前,而不是在后退按钮可见的视图控制器上。
let backButton = UIBarButtonItem()
backButton.title = "New Back Button Text"
self.navigationController?.navigationBar.topItem?.backBarButtonItem = backButton
如果要更改当前导航栏标题文本,请使用以下代码(请注意,这将成为推送到导航控制器上的NEXT视图的默认背景文本,但是此默认背景文本可以被上面的代码覆盖)
self.title = "Navigation Bar Title"
答案 10 :(得分:7)
Swift 4 - 在推送任何视图控制器之前配置后退按钮
// if you want to remove the text
navigationItem.backBarButtonItem = UIBarButtonItem()
// if you want to modify the text to "back"
navigationItem.backBarButtonItem = UIBarButtonItem(title: "back", style: .plain, target: nil, action: nil)
答案 11 :(得分:3)
在呈现控制器的viewDidLoad
方法中添加:
// hide navigation bar title in the next controller
let backButton = UIBarButtonItem(title: "", style:.Plain, target: nil, action: nil)
navigationItem.backBarButtonItem = backButton
答案 12 :(得分:2)
快捷键4
虽然先前的说法是正确的,并且返回按钮确实属于先前的VC,但确实添加了很多不必要的代码。
最好的办法是在viewDidLoad中设置当前VC的标题,它将自动在下一个VC上正确设置后退按钮的标题。这条线对我有用
navigationController?.navigationBar.topItem?.title = "Title"
答案 13 :(得分:1)
可以将以下代码添加到视图控制器中,从那里推送要更改后退按钮文本的视图控制器
斯威夫特 5
self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: self, action: nil)
例如:-
假设我们要更新 viewcontroller2 的标题,并且我们正在从 viewcontroller1 推送 viewcontroller2。
然后您可以使用以下代码:-
let vc2 = storyboard.instantiateViewController(withIdentifier: "ViewController2")
self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "your custom back button title", style: .plain, target: self, action: nil)
self.navigationController?.pushViewController(vc2, animated: true)
答案 14 :(得分:1)
有两种方法。
1。在previousViewController.viewDidLoad()
中let backBarBtnItem = UIBarButtonItem()
backBarBtnItem.title = "back"
navigationItem.backBarButtonItem = backBarBtnItem
2。在currentViewController.viewDidAppear()
中let backBarBtnItem = UIBarButtonItem()
backBarBtnItem.title = "back"
navigationController?.navigationBar.backItem?.backBarButtonItem = backBarBtnItem
原因:backButton
来自navigationBar.backItem.backBarButtonItem
,所以第一种方法是显而易见的。在currentViewController.viewDidLoad()中,由于在viewDidAppear中,我们无法获得backItem
的引用。 (),navigationBar
将navigationView
推到其stack
上。因此,我们可以在currentViewController.viewDidAppear()中对backItem
进行更改
有关更多详细信息,请参见Document:UINavigationBar
答案 15 :(得分:1)
尽管这些答案可以解决问题,但这可能是有用的
class MainNavigatioController: UINavigationController {
override func pushViewController(_ viewController: UIViewController, animated: Bool) {
// first
let backItem = UIBarButtonItem()
backItem.title = "رجوع"
self.viewControllers.last?.navigationItem.backBarButtonItem = backItem
// then
super.pushViewController(viewController, animated: animated)
}
}
答案 16 :(得分:1)
试试这个......它会起作用....
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
self.title = ""
}
以上代码将隐藏文本并仅显示导航栏上的后退箭头。
答案 17 :(得分:0)
快捷键4
在我的情况下,解决方案是在移至子视图控制器之前清除主视图控制器的导航项。如果再次显示,请重新设置
MasterController
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
navigationItem.title = "Master Title"
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
navigationItem.title = ""
}
这是我按下UIViewController并清除子控制器中的后退按钮按钮的方法:
MasterController
let childController = ChildController(collectionViewLayout: UICollectionViewFlowLayout())
childController.navigationItem.backBarButtonItem?.title = ""
navigationController?.pushViewController(childController, animated: true)
答案 18 :(得分:0)
如果从页面视图控制器页面推送视图控制器,则无法更新导航控制器的后退按钮标题。要解决此问题,请将委托创建回父视图控制器(您也可以将视图控制器层次结构遍历回父节点)。
此外,后退按钮具有字符限制。如果超过该字符数限制,系统将默认为&#34;返回&#34;。它不会截断你。例如:
backItem.title = "Birthdays/Anniversaries" // Get's converted to "Back".
backItem.title = "Birthdays/Anniversa…" // Fits and shows as is.
答案 19 :(得分:0)
override func viewWillAppear(_ animated: Bool) {
self.tabBarController?.navigationItem.title = "Notes"
let sendButton = UIBarButtonItem(title: "New", style: .plain, target: self, action: #selector(goToNoteEditorViewController))
self.tabBarController?.navigationItem.rightBarButtonItem = sendButton
}
func goToNoteEditorViewController(){
// action what you want
}
希望它有所帮助!! #swift 3
答案 20 :(得分:0)
对于Swift 4.2
let backItem = UIBarButtonItem()
backItem.title = ""
navigationItem.backBarButtonItem = backItem
答案 21 :(得分:0)
这适用于 Swift 5 :
self.navigationItem.backBarButtonItem?.title = ""
请注意,它将对下一个推送的视图控制器有效,而不是显示屏上的当前视图控制器,这就是为什么它非常令人困惑!
此外,检查情节提要,然后选择上一个视图控制器的导航项,然后在“后退按钮(检查器)”中键入一些内容。
答案 22 :(得分:0)
GOTCHA:如果您遇到很多建议不正确的建议,请确保您在UITableViewCell
中注册viewDidLoad()
,而不是在init()
中注册
答案 23 :(得分:0)
设置self.title = ""
在self.navigationController?.pushViewController(vc, animated: true)
之前。
答案 24 :(得分:-1)
迅速4
只有一种方法可以通过编程方式从当前viewController中更改backButton中的文本:
navigationController?.navigationBar.items![0].title = "some new text"
答案 25 :(得分:-1)
已检查解决方案,并可以在 Swift 5
中使用下面我针对不同情况提出了几种解决方案:
从“后退”按钮删除文本的最佳解决方案是在viewDidLoad()中添加:
navigationItem.backBarButtonItem = UIBarButtonItem()
如果要设置自己的标题,请通过设置backButton的标题来完成:
let backButton = UIBarButtonItem()
backButton.title = "My Title"
navigationItem.backBarButtonItem = backItem
如果您要在整个应用中创建通用样式-要使箭头向后没有文本,请为所有View Controller创建基础VC:
class BaseViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.backBarButtonItem = UIBarButtonItem()
}
}
上面提供的解决方案使您以后可以自定义后退按钮(如果以后想作一些例外),方法是添加其他变量并将其覆盖在特定的ViewController f.ex中:
class BaseViewController: UIViewController {
var customBackButtonTitle: String?
override func viewDidLoad() {
super.viewDidLoad()
var backButton = UIBarButtonItem()
if let text = customBackButtonTitle {
backButton.title = text
}
navigationItem.backBarButtonItem = backButton
}
}