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

Posted

技术标签:

【中文标题】如何在swift3中更改导航控制器上的后退按钮标题?【英文标题】:How to Change back button title on navigation controller in swift3? 【发布时间】:2016-11-09 10:33:27 【问题描述】:

我想在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

【问题讨论】:

检查这个***.com/a/32284525/4003548。 How to set back button text in Swift的可能重复 please reffer might answer you question 检查我更新的答案.... 【参考方案1】:

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

所以如果 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:)

当然现在它不会显示“希望对你有帮助:)

【讨论】:

【参考方案2】:

您必须设置您推送上述viewControllerviewControllernavigationItembackBarButtonItem 属性。

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

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

【讨论】:

【参考方案3】:

就是这样:

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

【讨论】:

【参考方案4】:

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 的标题,如果您不想删除标题,则只需将其注释掉

【讨论】:

【参考方案5】:

我没有找到我正在寻找的答案,所以我与你分享我的解决方案。

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

就我而言,我是在“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
        
    

【讨论】:

【参考方案6】:

尝试以下步骤将图像设置为您的后退按钮..

输出:

第 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 中选择您的导航栏,然后转到 Attribute Inspector。在 导航项 下更改您的返回 按钮名称 输入一个空白区域或以编程方式创建一个带有纯标题的返回按钮..

第五步:

将图标图像添加到您的资产。 1x29pt2x58pt3x87pt。我不确定资产图像的大小。请与 apple doc 确认大小等级。


更新:

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

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

【讨论】:

【参考方案7】:

您可以通过设置前一个屏幕的标题在情节提要中轻松做到这一点。 Image explaining how to do that from storyboard - 或者您可以通过将以下代码添加到您要导航回的视图控制器来实现。

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

【讨论】:

【参考方案8】:

viewDidLoad()

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

【讨论】:

以上是关于如何在swift3中更改导航控制器上的后退按钮标题?的主要内容,如果未能解决你的问题,请参考以下文章

如何更改后退按钮上的文本?

如何在渲染后更改后退按钮上的文本

更改导航栏后退按钮的粗细

UIPageViewController 更改导航栏后退按钮标题

如何更改缩短的后退按钮标题?

导航栏上的后退按钮仅显示没有单词的指示器