如何在swift3中更改导航控制器上的后退按钮标题?

问题描述 投票:2回答:6

我想在swift 3中将backbutton的标题更改为任何名称。我尝试了很多方法,但它们都没有为我工作。

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
swift uinavigationcontroller uinavigationbar uinavigationitem
6个回答
5
投票

导航项后退按钮名称将与之前视图控制器的标题相同,后者将其推送到导航堆栈:)

因此,如果VC A按下VC B,VC B中的后退按钮将为A.

所以你要做的就是,在使用代码推送新的viewController之前更改前一个viewController的标题:)

self.navigationItem.title = "ABCD"

在VC 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:)

当然现在不会显示“<”图标:)现在,如果你也想要它,你可以将它作为一个图像添加到后面栏按钮项目:)但它的繁琐:)

希望能帮助到你 :)


4
投票

你将不得不设置backBarButtonItemnavigationItemviewController属性,你推动所述viewController

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

但是,您必须为每个viewController设置此项。


3
投票

在Swift 3.0中将下面的代码放在appdelegate didFinishLaunchingWithOptions方法中,它对我来说非常适合

let backImage = UIImage(named: "BackNavigation")?.withRenderingMode(.alwaysOriginal)
UINavigationBar.appearance().backIndicatorImage = backImage
UINavigationBar.appearance().backIndicatorTransitionMaskImage = backImage
UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(0, -80.0), for: .default)

最后一行将删除Navigation Back Button的标题,如果你不想删除标题然后只是评论它


1
投票

我找不到我要找的答案,所以我与你分享我的解决方案。

有时您必须更改父ViewController中后退按钮的文本而不是ViewController中似乎已定义后退按钮,请记住导航控制器一个接一个地堆叠ViewControllers。

在我的情况下,我在“prepare(for segue: )”的函数ParentViewController上做了这个:

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

1
投票

这是方式:

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

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)!]
  }

第3步:

将以下代码添加到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并转到属性检查器。在导航项目下更改您的后退按钮名称输入一个空的空格或以编程方式创建一个带有普通标题的后退按钮。

enter image description here

第5步:

将图标图像添加到资产。 1x29pt,2x58pt和3x87pt。我不确定资产图像的大小。请查看关于尺寸等级的苹果文档。

enter image description here


更新:

我的类似答案与这篇文章有关。

How to customize the navigation back symbol and navigation back text?

© www.soinside.com 2019 - 2024. All rights reserved.