我可以从我的 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 的导航栏。