如何在Swift中设置按钮文本

时间:2015-02-12 06:55:04

标签: ios objective-c swift

如何删除后退按钮文本。

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

26 个答案:

答案 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)

您可以从界面构建器中执行以下操作:

单击上一个视图控制器的导航项

enter image description here

从属性检查器中将后退按钮文本设置为您想要的任何内容。 多数民众赞成!!

enter image description here

答案 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
}

}

结果将是:

enter image description here

答案 4 :(得分:26)

我不知道你在哪里使用过你提出问题的方法,但是如果我使用的话,我可以在我的ViewController类(我想要更改后退按钮)中获得所需的结果,在viewDidLoad()函数上,以下行:

self.navigationController?.navigationBar.backItem?.title = "Anything Else"

结果将是:

<强>之前

enter image description here

<强>后

enter image description here

答案 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)

您只需修改故事板中的NavigationItem

即可

enter image description here

在后退按钮中添加一个空格,然后按Enter键。

  

注意:在之前的VC中执行此操作。

答案 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)

例如:-

  1. ViewController1
  2. ViewController2

假设我们要更新 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的引用。 (),navigationBarnavigationView推到其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

中使用

下面我针对不同情况提出了几种解决方案:

1。从后退按钮中删除文本

从“后退”按钮删除文本的最佳解决方案是在viewDidLoad()中添加:

navigationItem.backBarButtonItem = UIBarButtonItem()

2。在“后退”按钮上设置自己的文字

如果要设置自己的标题,请通过设置backButton的标题来完成:

let backButton = UIBarButtonItem()
backButton.title = "My Title"
navigationItem.backBarButtonItem = backItem

3。所有VC上的空白后退按钮

如果您要在整个应用中创建通用样式-要使箭头向后没有文本,请为所有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
    }
}