【问题标题】:How to change the Back button color in a DetailViewController?如何更改 DetailViewController 中的后退按钮颜色?
【发布时间】:2018-03-07 06:06:06
【问题描述】:

我想更改 DetailViewController 中后退按钮的颜色。 我正在使用 Swift 3 和 Xcode 8.3.3;但这不起作用:

navigationItem.backBarButtonItem?.tintColor = UIColor.darkGray

有什么办法呢?

我也试过了:

navigationItem.leftBarButtonItem?.tintColor = UIColor.darkGray

但无济于事。

实际上我在调试器中验证了 navigationItem.backBarButtonItem 为 nil。

这是我上次使用 viewDidLoad 试用的完整代码:

override func viewDidLoad() {
    super.viewDidLoad()

    self.navigationController?.navigationBar.tintColor = UIColor.darkGray
}

这里是重现我的问题的简短步骤:

来自 Xcode 8.3.3:

  • 创建一个新的 Xcode 项目

  • 选择主从应用程序。你不需要核心数据。

  • 创建项目。

  • 在 DetailViewController.swift 的 viewDidLoad() 函数中,添加一行:

    self.navigationItem.backBarButtonItem?.tintColor = UIColor.darkGray
    self.navigationController?.navigationBar.tintColor = UIColor.darkGray
    

    当您尝试 DetailViewController 的后退按钮时,您会看到保持蓝色。

    如果你看到一些不同的东西,那么我的 Xcode 一定很奇怪。

【问题讨论】:

    标签: ios swift3 uinavigationcontroller


    【解决方案1】:

    我可以改变它:

    self.navigationController?.navigationBar.tintColor = UIColor.white
    

    希望这对你有用!

    编辑:

    创建项目后,您将在故事板中看到以下内容:

    我将其更改为以下内容:

    这给了我以下输出:

    以下是我在 DetailViewController 中的 viewDidLoad() 代码:

    override func viewDidLoad() {
        super.viewDidLoad()
        self.navigationController?.navigationBar.tintColor = UIColor.red
        // Do any additional setup after loading the view, typically from a nib.
        configureView()
    }
    

    希望现在已经足够清楚了。

    【讨论】:

    • 你在viewDidLoad中更改它吗?
    • 您到底想看什么?是的,我正在 viewDidLoad 中这样做。
    • 上传了一个正在更改条形颜色的测试项目:nofile.io/f/nRx37mfYspZ/testing.zip 我认为问题是由于您的 .storyboard 文件而发生的。只需将您的 .storyboard 与测试项目进行比较即可确保。
    • 我刚刚编辑了我的帖子以逐步添加重现问题的方法。有时间请看一下。
    • 谢谢。有用!一点:我不得不将这一行:“让控制器=(segue.destination as!UINavigationController).topViewController as!DetailViewController”改为:“let controller = segue.destination as!DetailViewController”。我想知道苹果是否意识到这一点。在 iPhone 上,您甚至可以摆脱其中一个导航控制器(可能不在 iPad 上,我没有尝试过。)
    【解决方案2】:

    检查你是否在storyboard中正确嵌入了导航控制器,然后在detailviewcontroller的viewDIDLoad中写入如下代码:

    self.navigationController?.navigationBar.tintColor = UIColor.brown
    

    一切正常

    【讨论】:

    • 您能否解释一下“在情节提要中正确嵌入导航控制器”的含义。我需要准确检查什么?如果我看起来一切正常。
    • 我的意思是说'转到情节提要->选择要制作初始视图控制器的视图控制器->将编辑器嵌入到导航控制器中并将导航控制器作为初始视图控制器。
    【解决方案3】:

    确保您已正确嵌入导航控制器。还请确保您已提供正确的控制器类以更安全。

    在控制器类中只需添加这一行-:

    import UIKit
    
    class First: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
    self.navigationController?.navigationBar.tintColor = UIColor.darkGray
            // Do any additional setup after loading the view.
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    }
    

    输出-:

    【讨论】:

    • 这就是我所做的。
    • @Michel 如果它不适合您,请使用更多详细信息编辑您的问题。
    • 我刚刚编辑了我的帖子以逐步添加重现问题的方法。有时间请看一下。
    • @Michel 为什么不是单视图应用程序?我创建了单视图应用程序,从未尝试过主详细信息应用程序。如果可能,请尝试使用单视图应用程序,它应该可以工作。
    • 如果你想测试我的错误,你必须和我一样尝试。使用我在帖子末尾给出的步骤,只需不到一分钟。如果你有时间。除了我的问题与单视图应用程序无关。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-25
    • 1970-01-01
    相关资源
    最近更新 更多