Ios UIViewController在XIB中?

Ios UIViewController在XIB中?,ios,objective-c,uiviewcontroller,uinavigationcontroller,xib,Ios,Objective C,Uiviewcontroller,Uinavigationcontroller,Xib,目前,我正在努力创建UIViewController或UINavigationController的子类,并使用XIB文件作为视图 当我从Xcode的菜单(新建文件->类->带Nib…等等)创建所有内容时,我得到了一个XIB,但只有一个普通的UIView,但我想要UIViewController 我在某处读到XIBs仅用于视图,您必须在代码中处理控制器,这是真的吗?因为正如您所知,可以将导航控制器组件插入到XIB中。但是我对本教程中的代码有一个问题-我使用emptyUINavigationBar

目前,我正在努力创建
UIViewController
UINavigationController
的子类,并使用XIB文件作为视图

当我从Xcode的菜单(新建文件->类->带Nib…等等)创建所有内容时,我得到了一个XIB,但只有一个普通的
UIView
,但我想要
UIViewController

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


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

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


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

我刚刚检查了一下,以确认它是否可行,令我惊讶的是它是您可以在XIB中安装
UIViewController
s

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

我以前从未使用过它,但我认为因为它提供了从项目库选择视图控制器的选项,所以它必须是可能的。我已经在我的
xib
中添加了一个,就像在故事板中一样,我将它与类、set
IBOutlet
s和
IBAction
s链接在一起,一切都非常好

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

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

在这里,您可以找到我的测试项目:

我了解XIB文件仅用于可视内容,并且我了解故事板背后的概念。但是我想在XIB中使用UIViewController组件,例如,
UINavigationBar
,以便在Interface Builder中设计视图。