【问题标题】:How to Change back button title on navigation controller in swift3?如何在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

【问题讨论】:

标签: swift uinavigationcontroller uinavigationbar uinavigationitem


【解决方案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
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2014-04-30
                  • 2012-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-11-29
                  • 1970-01-01
                  相关资源
                  最近更新 更多