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

时间:2016-11-09 10:33:27

标签: swift uinavigationcontroller uinavigationbar uinavigationitem

我想将backbutton的标题更改为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

8 个答案:

答案 0 :(得分: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:)

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

希望有所帮助:)

答案 1 :(得分:4)

您必须设置推送backBarButtonItem的{​​{1}} navigationItem的{​​{1}}属性。

viewController

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

答案 2 :(得分: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的标题,然后只需对其进行评论

答案 3 :(得分: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
        }
    }

答案 4 :(得分: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 。我不确定资产图片大小。请查看 apple doc 关于尺寸类..

enter image description here

<强>更新

我的相似答案与此帖有关。

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

答案 5 :(得分:0)

这是方法:

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

答案 6 :(得分:0)

您可以通过设置上一个屏幕的标题,从情节提要中轻松地执行此操作。 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
    }

答案 7 :(得分:0)

viewDidLoad()

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