XIB里面的UIViewController?

时间:2014-07-15 22:28:15

标签: ios objective-c uiviewcontroller uinavigationcontroller xib

目前,我正在努力创建UIViewControllerUINavigationController的子类,并将 XIB 文件作为视图。

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

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

我没有试图强迫Interface Builder做一些不寻常的事情,但我想知道这是否可行(修改内容视图中的视图控制器组件会更容易和更好)?如果是,如何实现这一目标?

2 个答案:

答案 0 :(得分:1)

我刚刚检查了是否有可能,令我惊讶的是! 您可以在Xib中使用UIViewController

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

我以前从未使用过它,但是我认为由于它为您提供了从项目库中选择视图控制器的选项,因此它必须是可能的。我已经在xib中添加了一个,就像在情节提要中一样,我将其与类关联,设置了IBOutletIBAction,它们都运行良好。

关键是要像这样实例化它:

// 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

答案 1 :(得分:0)

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

我认为你要做的就是使用一个故事板,它可以让你在视觉上布局你的UIViewControllers来定义彼此的segue(在你的情况下在导航控制器中),这意味着显示下一个UIViewControllers视图并将其放入UIViewController层次结构。