Swift 在导航栏上只设置一次图像

Swift 在导航栏上只设置一次图像,swift,uiimage,uinavigationbar,Swift,Uiimage,Uinavigationbar,我有一个带有多个ViewController的应用程序,我必须在导航栏的标题中显示一个图像,我已经有了这个代码 public func carregarLogoNav() -> Void { let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 86, height: 38)) imageView.contentMode = .scaleAspectFit let image = UIImage(n

我有一个带有多个ViewController的应用程序,我必须在导航栏的标题中显示一个图像,我已经有了这个代码

public func carregarLogoNav() -> Void {
    let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 86, height: 38))
    imageView.contentMode = .scaleAspectFit
    let image = UIImage(named: "logo-simples.png")
    imageView.image = image
    navigationItem.titleView = imageView
}
但我想知道是否有可能将此图像复制到所有其他视图,而不必在每个视图中粘贴此代码

另一种方法是在另一个ViewController中调用此函数,但它也不起作用

anotherViewController().carregarLogoNav()

如果希望在所有视图控制器中都具有相同的
标题视图
,则可以将
carregarLogoNav
函数放入扩展名中,然后从每个视图控制器的
viewDidLoad
调用它:

extension UIViewController {
    public func setupCarregarLogoNav() {
        let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 86, height: 38))
        imageView.contentMode = .scaleAspectFit
        let image = UIImage(named: "logo-simples.png")
        imageView.image = image
        navigationItem.titleView = imageView
    }
}
然后在每个视图控制器中:

override func viewDidLoad() {
    super.viewDidLoad()

    setupCarregarLogoNav()

    // any other code
}

这样,您的设置代码只存在一次。它只是从其他地方调用的。

如果您希望在所有视图控制器中都有相同的
标题视图
,则可以将
carregarLogoNav
函数放在扩展名中,然后从每个视图控制器的
viewDidLoad
调用它:

extension UIViewController {
    public func setupCarregarLogoNav() {
        let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 86, height: 38))
        imageView.contentMode = .scaleAspectFit
        let image = UIImage(named: "logo-simples.png")
        imageView.image = image
        navigationItem.titleView = imageView
    }
}
然后在每个视图控制器中:

override func viewDidLoad() {
    super.viewDidLoad()

    setupCarregarLogoNav()

    // any other code
}

这样,您的设置代码只存在一次。它只是从其他地方调用的。

如果我只需要一次,这对我来说是完美的,但是这个方法有效,谢谢。另一个选项是创建
UIViewController
的子类,并让它的
viewDidLoad
设置
标题视图。然后,所有视图控制器都需要扩展该自定义视图控制器。但是,如果您还需要表视图控制器或集合视图控制器等,您就回到了开始的位置。如果我只需要一次,这对我来说将是完美的,但是这个方法有效,谢谢。另一个选项是创建
UIViewController
的子类,并让它的
viewdiload
设置
titleView
。然后,所有视图控制器都需要扩展该自定义视图控制器。但是,如果您还需要表视图控制器或集合视图控制器等,那么就回到了开始的位置。