swift - 快速从另一个类访问 navigationBarController
问题描述
我想从我的主类 HomeController 访问 MyNavigationBarController.swift 类中的导航栏。这是因为我在不同的视图控制器中重用了导航栏,并且我想在那时减少冗余。当我将该功能集成到 HomeController.swift 中时,它工作正常。
但是,当我将导航类设为单独的类时,启动模拟器时不再显示导航栏。
我觉得问题在于“self.view”,但我不知道如何解决这个问题。
斯威夫特 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
。您需要将其添加到控制器的视图中。您可以更改功能,如下所示:
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)
推荐阅读
- python - tensorflows 总是向我展示这些行
- reactjs - 如何将接口传递给 Typescript React 应用程序中的子组件
- makefile - GNU 制定规则顺序/偏好
- html - 水平创建一个接一个的flexbox容器
- c++ - 计算一个向量完全在另一个向量中出现的次数
- shiny - 在 Shiny 中使用 Datatable 创建文本换行和管理列宽
- python - 没有模块 'gi' 和 ImportError:GTK3 后端需要 PyGObject 错误
- html - 在移动视图中将元素组合成轮播?
- go - Golang 将字符串化列表转换为切片
- python - 亚马逊 s3 未提供 Django 静态文件,即使所有说明都已严格遵循