【问题标题】:UIViewController inside XIB?XIB 内的 UIViewController?
【发布时间】:2014-09-06 07:11:21
【问题描述】:

目前我正在努力使用 XIB 文件作为视图来创建 UIViewControllerUINavigationController 的子类。

当我从 Xcode 的菜单(新建文件 -> 类 -> 使用 Nib... 等)创建所有内容时,我得到一个 XIB 但只有一个普通的UIView 但我想要@改为 987654325@。

我在某处读到 XIB 仅用于视图,您必须在代码中处理控制器,这是真的吗?因为您可以阅读here,因此可以将导航控制器组件插入到 XIB 中。但是我对本教程中的代码有一个问题 - 我得到空视图和空 UINavigationBar。当我对常规视图控制器执行相同操作时,我会得到有关此控制器多次使用的信息...

我并不是要强制 Interface Builder 做一些不寻常的事情,但我想知道这是否可能(修改包含内容视图的视图控制器组件会更容易和更好)?如果是,如何实现?

【问题讨论】:

    标签: ios objective-c uiviewcontroller uinavigationcontroller xib


    【解决方案1】:

    我刚刚检查过它是否可能,令我惊讶的是它是可能的! 你可以在 Xibs 中拥有UIViewControllers

    测试是在 XCode 10.1、Swift 4.2 中完成的。

    我以前从未使用过它,但我认为既然它让您可以从项目库中选择视图控制器,那么它必须是可能的。我在我的xib 中添加了一个,就像在故事板中一样,我将它与班级联系起来,设置了IBOutlets 和IBActions,一切都很好。

    关键是像这样实例化它:

    // Method inside the `UIViewController` you want to present our view controller from xib
    // The xib file is `XibViewController.xib` and it has only one item inside - `UIViewController` with custom class set to `XibViewController`
    
    guard let xibViewController = UINib(nibName: "XibViewController", bundle: nil).instantiate(withOwner: self, options: nil).first as? XibViewController else { return }
    
    present(xibViewController, animated: true)
    

    在这里你可以找到我的测试项目:https://github.com/stoqn4opm/XibViewController

    【讨论】:

      【解决方案2】:

      XIB 文件用于构建可在屏幕上查看的内容。 UIViewController 不可见。相反,它拥有从 XIB 或代码创建的视图(可查看)。

      我认为您正在尝试做的是使用故事板,它可以让您直观地布局 UIViewController 以定义彼此之间的 segue(在您的情况下是导航控制器),这意味着显示下一个 UIViewControllers 视图并将其放入UIViewController 层次结构。

      【讨论】:

      • 我了解 XIB 文件仅用于可视内容,并且我了解 Storyboard 背后的概念。但我想在 XIB 中使用 UIViewController 组件来拥有例如。 UINavigationBar 方便在 Interface Builder 中设计视图。
      猜你喜欢
      • 2011-10-23
      • 2014-03-26
      • 1970-01-01
      • 2016-02-27
      • 1970-01-01
      • 2014-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多