首页 > 解决方案 > 从 xib 文件加载 TestViewController(一切正常,但我有一个问题)

问题描述

我有一个TestViewController.swift和一个TestViewController.xib呈现 TestViewController 的布局。

要加载这个视图控制器,我有这个方法

let vc = TestViewController(nibName: "TestViewController", bundle: nil)
self.navigationController?.pushViewController(vc, animated: true)

一切正常,但如果我调用空初始化程序:

let vc = TestViewController()
self.navigationController?.pushViewController(vc, animated: true)

或者使用 nil nibname

let vc = TestViewController(nibName: nil, bundle: nil)
self.navigationController?.pushViewController(vc, animated: true)

该应用程序还可以继续工作而无需更改。明确指定 xib 文件的名称有什么意义?在这种情况下,三个调用有什么区别?

标签: iosswiftuiviewcontrolleruinavigationcontrollerxib

解决方案


出色地,

如果您仅使用代码创建视图,您将在这一部分中使用,因为您从未告诉 Xcode 加载 nib 文件,因此从未加载过 nib 文件,因此永远不会加载您在 nib 文件中创建的项目。

let vc = TestViewController()
self.navigationController?.pushViewController(vc, animated: true)

在这一部分中,您告诉 vc 需要首先从 nib 文件加载,您必须使用包含视图控制器的 nib 文件的名称。

let vc = TestViewController(nibName: nil, bundle: nil)
self.navigationController?.pushViewController(vc, animated: true)

因此,如果您使用的是 nib 文件,您将使用第二个文件,但如果您只使用代码来创建视图控制器,请使用第一个,但我通常使用 Storyboard 而不是使用 nib 文件来创建视图控制器。

let storyboard = UIStoryboard(name: "storybardName", bundle: nil)
let customViewController = storyboard.instantiateViewController(withIdentifier: "CustomViewController")


推荐阅读