【问题标题】:Can I inherit from a UINavigationController in my UIViewController?我可以从 UIViewController 中的 UINavigationController 继承吗?
【发布时间】:2015-10-19 18:57:57
【问题描述】:

我正在尝试在我的导航控制器中创建一个自定义导航栏,该导航栏在初始导航控制器之后通过每个视图持续存在。我在自定义 UINavigationController 类中设置导航栏,并尝试在我的 UIViewController 自定义类中继承导航控制器的属性(导航控制器之后的第一个视图控制器)

这是我正在使用的语法,其中 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 时,它可以工作。

【问题讨论】:

  • UINavigationControllerUIViewControllers 的“集合”。如果您的UINavigationController 已经自定义,则所有推入或弹出自定义NavCon 的UIViewControllers 都将具有相同的导航栏。
  • 想做什么
  • @Lamar,正如我在第一行中所说,我试图在我的导航控制器中创建一个自定义导航栏,该导航栏在初始导航控制器之后的每个视图中持续存在。因此,将标题后面的标准导航控制器替换为我的自定义导航控制器。

标签: ios xcode swift uiviewcontroller uinavigationcontroller


【解决方案1】:

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

我认为您误解了如何在子视图控制器中“继承”(不是正确的词)导航栏。子视图控制器必须是UIViewController 的子类。然后@IBOutlets 正常运行。只要它们由UINavigationController管理,通过创建适当的“显示”序列,它们就会自动装饰UINavigationController 的导航栏。

【讨论】:

  • 谢谢,我最初尝试过这种方法,但我不明白为什么导航控制器没有应用于它之后的视图。我意识到问题在于我一直在使用 self.navigationController?.navigationBar 而不是 self.navigationBar。
猜你喜欢
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-07
  • 2011-01-21
  • 1970-01-01
  • 2011-02-09
相关资源
最近更新 更多