gpt4 book ai didi

swift - swift 从另一个类访问navigationBarController

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

我想从主类 HomeController 访问类 MyNavigationBarController.swift 中的导航栏。这是因为我在不同的 View Controller 中重复使用导航栏,我想减少此时的冗余。当我将函数集成到 HomeController.swift 时,它工作正常。

但是,当我将导航类设为单独的类时,启动模拟器时不再显示导航栏。

我觉得问题出在“self.view”,但我不知道如何解决这个问题。

swift 4

HomeController.swift

class HomeController: UIViewController {

let myNavigator = MyNavigationBarController()

override func viewDidLoad() {
super.viewDidLoad()

// load navigation bar
myNavigator.setNavigationBar()
}

MyNavigationBarController.swift

class MyNavigationBarController: UINavigationController {

let navBar = UINavigationBar()

func setNavigationBar() {
navBar.translatesAutoresizingMaskIntoConstraints = false
let navItem = UINavigationItem(title: "")
let statusItem = UIBarButtonItem(title: "Status", style: .plain, target: self, action: #selector(status))

navItem.rightBarButtonItem = statusItem

navBar.setItems([navItem], animated: false)

self.view.addSubview(navBar)
}

@objc func status() {
print("hello")
}

最佳答案

你是对的。问题是 self.view。您需要将其添加到 Controller 的 View 中。你可以改变你的功能,像这样:

func setNavigationBarInView(_ view:UIView) {
navBar.translatesAutoresizingMaskIntoConstraints = false
let navItem = UINavigationItem(title: "")
let statusItem = UIBarButtonItem(title: "Status", style: .plain, target: self, action: #selector(status))

navItem.rightBarButtonItem = statusItem

navBar.setItems([navItem], animated: false)

view.addSubview(navBar)
}

然后:

myNavigator.setNavigationBarInView(view)

关于swift - swift 从另一个类访问navigationBarController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51273589/

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