我可以从UIViewController中的UINavigationController继承吗?

时间:2015-07-29 00:56:02

标签: ios xcode swift uiviewcontroller uinavigationcontroller

我正在尝试在导航控制器中创建一个自定义导航栏,该导航栏在初始导航控制器之后会持续显示每个视图。我在自定义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时,它可以工作。

1 个答案:

答案 0 :(得分:2)

UINavigationController不管理视图 - 它管理其他UIViewControllers - 所以它不会初始化任何随机的@IBOutlets。它只关心初始化其导航栏并连接到其子视图控制器。

我认为您误解了如何在子视图控制器中“继承”(不是正确的词)导航栏。子视图控制器必须是UIViewController的子类。然后@IBOutlets正常行动。只要UINavigationController通过创建正确的“展示”细分来管理,他们就会自动使用UINavigationController进行装饰导航栏。