如何在Swift3中更改导航控制器返回按钮标题?

7

我希望在Swift 3中将返回按钮的标题更改为任何名称。我尝试了很多方法,但都没有成功。

self.navigationItem.backBarButtonItem?.title="Title"
self.navigationController?.navigationItem.backBarButtonItem?.title="Title"

仅供参考,我在AppDelegate中编写了以下代码。

let backImage : UIImage = UIImage(named:"backArrow")!
UINavigationBar.appearance().barTintColor = UIColor(red: 0.0/255.0, green: 0.0/255.0, blue: 0.0/255.0, alpha: 1.0)
UINavigationBar.appearance().tintColor = UIColor.white
UINavigationBar.appearance().backIndicatorImage = backImage
UINavigationBar.appearance().backIndicatorTransitionMaskImage = backImage
UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName : UIColor.white]
UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(0, 0), for: .default)
IQKeyboardManager.sharedManager().enable = true
self.window?.backgroundColor = UIColor.white

请查看此链接:https://dev59.com/6F4b5IYBdhLWcg3w-10I#32284525。 - vaibhav
1
可能是如何在Swift中设置返回按钮文本的重复问题。 - Vandit Mehta
请参考以下链接,可能会回答您的问题:https://dev59.com/c3M_5IYBdhLWcg3wRw51 - TheCodeTalker
请检查我的更新答案... - Joe
8个回答

10

导航栏返回按钮的名称将与推送它到导航栈中的上一个视图控制器的标题相同 :)

因此,如果VC A推动VC B,则VC B中的返回按钮将是A。

所以你唯一能做的就是,在使用代码推送新的视图控制器之前更改上一个视图控制器的标题 :)

self.navigationItem.title = "ABCD"

而在视图控制器 A 的 ViewWillAppear 方法中,您可以将标题恢复为之前的任何内容 :)

self.navigationItem.title = "Back to xyz"

话虽如此,如果您不想要这一切闹剧 :) 您可以使用以下代码隐藏默认返回按钮:

self.navigationItem.hidesBackButton = true

在您的 VC B 中,创建一个 UIBarButton 按钮项,设置任何您想要设置的标题,然后将其设置为 leftBarButtonItem :) 使用以下代码:

self.navigationItem.leftBarButtonItem = UIBarButtonItem(title: NSLocalizedString("ABCD", comment: "ABCD"), style: .plain, target: self, action:#selector(self.abcdTapped:)

当然,现在不会显示"<"图标 :) 如果您也想要它,可以将其作为图像添加到后退按钮项中 :) 但是这很麻烦 :)

希望能有所帮助 :)


5

您需要设置backBarButtonItem属性,该属性属于从所述viewController推送的viewControllernavigationItem

self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "Back", style: UIBarButtonItemStyle.plain, target: nil, action: nil)

然而,你必须为每个 viewController 设置这个。


4
这是方法:

extension UINavigationController {
    func addCustomBackButton(title: String = "Back") {
        let backButton = UIBarButtonItem()
        backButton.title = title
        navigationBar.topItem?.backBarButtonItem = backButton
    }
}

3
在Swift 3.0中,在appdelegatedidFinishLaunchingWithOptions方法中加入以下代码,对我来说完美地解决了问题。
let backImage = UIImage(named: "BackNavigation")?.withRenderingMode(.alwaysOriginal)
UINavigationBar.appearance().backIndicatorImage = backImage
UINavigationBar.appearance().backIndicatorTransitionMaskImage = backImage
UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(0, -80.0), for: .default)

最后一行将删除导航返回按钮的标题,如果您不想删除标题,请注释掉它。

2

我没有找到我想要的答案,所以现在和大家分享我的解决方案。

有时候你需要在父视图控制器中更改返回按钮的文本,而不是在看起来定义了返回按钮的视图控制器中更改。请记住,导航控制器将视图控制器一个接一个地堆叠在一起。

在我的情况下,我是在“ParentViewController”的“prepare(for segue:)”函数中完成这个操作的:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    if segue.identifier == "showChildViewController" {
        if let childViewController = segue.destination as? ChildViewController {
            let backItem = UIBarButtonItem()
            backItem.title = "Back"
            navigationItem.backBarButtonItem = backItem
        }
    }

0

你可以通过设置前一个屏幕的标题来轻松完成此操作,方法是从故事板中进行设置。图示说明如何从故事板中进行设置 - 或者您可以通过向您正在导航回去的视图控制器添加以下代码来完成此操作。

override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(true)
        let backItem = UIBarButtonItem()
        backItem.title = "Title"
        navigationItem.backBarButtonItem = backItem
    }

0

尝试以下步骤将图像设置为您的返回按钮。

输出:

enter image description here

步骤1:

将以下代码添加到您的AppDelegate

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.

    var backButtonImage = UIImage(named: "Your Image Name")
    backButtonImage = backButtonImage?.stretchableImage(withLeftCapWidth: 0, topCapHeight: 0)
    UIBarButtonItem.appearance().setBackButtonBackgroundImage(backButtonImage, for: .normal, barMetrics: .default)
    UINavigationBar.appearance().barTintColor = UIColor(red: 0.0/255.0, green: 0.0/255.0, blue: 0.0/255.0, alpha: 1.0)
    UINavigationBar.appearance().tintColor = UIColor.white

    return true
}

步骤2:

将以下代码添加到您的MainVC

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    title = "Title 1"
    navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.white, NSFontAttributeName:UIFont(name:"HelveticaNeue", size: 20)!]
  }

第三步:
将以下代码添加到您的DestVC或2ndVC中。
override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    title = "Title 2"
    navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.white, NSFontAttributeName:UIFont(name:"HelveticaNeue", size: 20)!]
  }

步骤4:

从你的StoryBoard中选择你的navigationBar并进入Attribute Inspector。在Navigation Item下更改你的返回按钮名称,输入一个空格或者通过编程创建一个带有纯文本标题的返回按钮。

enter image description here

步骤五:

将图标图像添加到您的资源中。大小为1x29pt2x58pt3x87pt。我不确定资产图像的大小,请查看苹果文档以了解大小类别。

enter image description here


更新:

我在这篇帖子中提供了相关的类似答案。

如何自定义导航返回符号和导航返回文本?


0

viewDidLoad()

    let backBarButtonItem = UIBarButtonItem(title: "You back button title here", style: .plain, target: nil, action: nil)
    navigationItem.backBarButtonItem = backBarButtonItem

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接