我可以从我的 UIViewController 中的 UINavigationController 继承吗?
Can I inherit from a UINavigationController in my UIViewController?
我正在尝试在我的导航控制器中创建一个自定义导航栏,该导航栏在初始导航控制器之后持续存在于每个视图中。我在自定义 UINavigationController class 中设置了导航栏,我试图在我的 UIViewController 自定义 class 中继承导航控制器的属性(导航控制器之后的第一个视图控制器)
这是我使用的语法,其中 HomePageViewController 是我想继承导航栏的 UIViewController,numberInput 是我的 HomePageViewController 中的 UITextField:
SearchNavigationController.swift
class SearchNavigationController: UINavigationController {
override func viewDidLoad() {
super.viewDidLoad()
// Set up custom navigation bar
}
HomePageViewController.swift
class HomePageViewController: SearchNavigationController, UITextFieldDelegate, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var numberInput: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
numberInput.delegate = self
}
但是,当我的应用程序调用 numberInput.delegate = self 时,出现错误:致命错误:在展开可选值时意外发现 nil。
但是当我用 UIViewController 替换 SearchNavigationController 时,它起作用了。
A UINavigationController
不管理视图——它管理其他视图 UIViewControllers
——因此它不会初始化任何随机的@IBOutlets。它只关心初始化它的导航栏和连接到它的子视图控制器。
我认为您误解了如何 "inherit"(不是正确的词)您的子视图控制器中的导航栏。子视图控制器必须是 UIViewController
的子类。然后@IBOutlets 正常运行。只要它们由 UINavigationController
管理 通过创建适当的 'show' segues,它们就会 自动装饰 UINavigationController
的导航栏。
我正在尝试在我的导航控制器中创建一个自定义导航栏,该导航栏在初始导航控制器之后持续存在于每个视图中。我在自定义 UINavigationController class 中设置了导航栏,我试图在我的 UIViewController 自定义 class 中继承导航控制器的属性(导航控制器之后的第一个视图控制器)
这是我使用的语法,其中 HomePageViewController 是我想继承导航栏的 UIViewController,numberInput 是我的 HomePageViewController 中的 UITextField:
SearchNavigationController.swift
class SearchNavigationController: UINavigationController {
override func viewDidLoad() {
super.viewDidLoad()
// Set up custom navigation bar
}
HomePageViewController.swift
class HomePageViewController: SearchNavigationController, UITextFieldDelegate, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var numberInput: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
numberInput.delegate = self
}
但是,当我的应用程序调用 numberInput.delegate = self 时,出现错误:致命错误:在展开可选值时意外发现 nil。
但是当我用 UIViewController 替换 SearchNavigationController 时,它起作用了。
A UINavigationController
不管理视图——它管理其他视图 UIViewControllers
——因此它不会初始化任何随机的@IBOutlets。它只关心初始化它的导航栏和连接到它的子视图控制器。
我认为您误解了如何 "inherit"(不是正确的词)您的子视图控制器中的导航栏。子视图控制器必须是 UIViewController
的子类。然后@IBOutlets 正常运行。只要它们由 UINavigationController
管理 通过创建适当的 'show' segues,它们就会 自动装饰 UINavigationController
的导航栏。