我正在尝试在导航控制器中创建一个自定义导航栏,该导航栏在初始导航控制器之后会持续显示每个视图。我在自定义UINavigationController类中设置了导航栏,我试图在我的UIViewController自定义类(导航控制器后面的第一个View Controller)中继承导航控制器的属性
这是我正在使用的语法,其中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时,我收到错误:致命错误:在展开Optional值时意外发现nil。
但是当我用UIViewController替换SearchNavigationController时,它可以工作。
答案 0 :(得分:2)
UINavigationController
不管理视图 - 它管理其他UIViewControllers
- 所以它不会初始化任何随机的@IBOutlets。它只关心初始化其导航栏并连接到其子视图控制器。
我认为您误解了如何在子视图控制器中“继承”(不是正确的词)导航栏。子视图控制器必须是UIViewController
的子类。然后@IBOutlets正常行动。只要UINavigationController
通过创建正确的“展示”细分来管理,他们就会自动使用UINavigationController
进行装饰导航栏。