gpt4 book ai didi

ios - 创建自定义 UINavigationcontroller 类

转载 作者:行者123 更新时间:2023-11-28 11:02:29 25 4
gpt4 key购买 nike

我已经对我的嵌入式 UINavigationcontroller 进行了以下自定义。我已在将首先显示的 View 的 View Controller 中完成此操作。

但是我正在尝试清理它,以便通过创建一个单独的类来处理这个问题,我的 UIView 类中就没有这一切了。我目前使用的代码

self.navigationController?.navigationBar.setBackgroundImage(UIImage(named: "navigation.background"), for: .default)

let backButton = UIImage(named: "Back.button")?.withRenderingMode(.alwaysOriginal)
let backButtonHigh = UIImage(named: "Back.button.highlighted")?.withRenderingMode(.alwaysOriginal)


self.navigationController?.navigationBar.backIndicatorImage = backButton
self.navigationController?.navigationBar.backIndicatorTransitionMaskImage = backButtonHigh
self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)

我尝试做的是在这样的新类中扩展 UInavigationcontroller

class RSRNavigationController: UINavigationController{
override func viewDidLoad() {
super.viewDidLoad()

self.navigationController?.navigationBar.setBackgroundImage(UIImage(named: "navigation.background"), for: .default)

let backButton = UIImage(named: "Back.button")?.withRenderingMode(.alwaysOriginal)
let backButtonHigh = UIImage(named: "Back.button.highlighted")?.withRenderingMode(.alwaysOriginal)

self.navigationController?.navigationBar.backIndicatorImage = backButton
self.navigationController?.navigationBar.backIndicatorTransitionMaskImage = backButtonHigh
self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
}
}

这行不通。它会毫无问题地运行,但实际上不会执行任何操作。

我也尝试过以下操作

class RSRNavigationController: UINavigationBar{
override func draw(_ rect: CGRect) {
super.draw(rect)
self.setBackgroundImage(UIImage(named: "navigation.background"), for: .default)
let backButton = UIImage(named: "Back.button")?.withRenderingMode(.alwaysOriginal)
let backButtonHigh = UIImage(named: "Back.button.highlighted")?.withRenderingMode(.alwaysOriginal)
self.backIndicatorImage = backButton
self.backIndicatorTransitionMaskImage = backButtonHigh
//self.backItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
}

但是我似乎无法设置后退按钮的标题。

有人知道如何解决这个问题吗?

最佳答案

当您在自定义 navigationController 类中引用 navigationController 时,您的问题就出在这里

而不是做

self.navigationController?.navigationBar.backIndicatorImage = backButton

这样做

self.navigationBar.backIndicatorImage = backButton

原因?

因为当您通过 UINavigationController 扩展您的自定义类时,它本身就变成了一个导航 Controller 。通过执行 self.navigationController,您告诉您的应用程序寻找您的自定义 navigationCOntroller 所在的 navigationController。当然,这样的导航 Controller 不存在,因为您的自定义 navController 是应用程序的主要或顶部 navController。因此,只需从您的自定义类中删除 self.navigationController 部分,您在 viewDidLoad 中编写的其余代码应该可以正常工作。

如果还有什么问题欢迎随时提问

关于ios - 创建自定义 UINavigationcontroller 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40083483/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com