我完全被这个问题困扰了。
我有一个应用程序,其视图控制器大多是在故事板上制作的。然而, 有一些完全由代码(以编程方式)完成。
我的应用程序的入口点是一个TabBarController,它可以输入许多不同的导航控制器,每个导航控制器都有自己的UIViewController。
使用Tab Bar Items导航到任何正确的视图控制器(在故事板中表示)都没有问题。 但是,当我在故事板上选择一个没有直接segue的Tab Bar项时 - 因为它的UIViewController完全是通过代码构建的 - 我无法进入正确的类。
我在带有ViewDidLoad()函数的NavigationController中添加了一个* .swift类。当我选择合适的标签栏项目时,永远不会调用此函数。 奇怪的是,有一个单独的导航控制器连接到UIViewController(显示在故事板中)并附有* .swift文件。当选择了正确的Tab Bar项时,它的ViewDidLoad()会被调用。 我试图附加多个* .swift文件(所有文件都继承自UINavigationController),但是我无法通过一个单独的文件来调用相应的ViewDidLoad()函数。
编辑:正如您在图像中看到的那样,左下方的导航控制器没有从中延伸的segue。但是,附加了一个类,并且在其ViewDidLoad()函数内部是segue发生的位置
class WeaponsNavController: UINavigationController
{
override func viewDidLoad()
{
self.navigationController?.pushViewController(WeaponsTableVC(), animated: true)
}
}
正如您所看到的,我正在尝试连接到WeaponsTableVC(),这是一个完全通过代码创建的视图控制器。但是,尽管直接连接到故事板中的导航控制器,但这个类似乎根本没有被调用。
答案 0 :(得分:0)
如果视图控制器没有关联的nib文件,则此方法会创建一个普通的UIView对象。 如果在实例化视图控制器时没有提供nib文件,UIViewController会调用它的loadView()方法,该方法创建一个普通的UIView对象并将其分配给它的view属性。
// Assuming TestViewController is the view to load
let viewController = TestViewController()
navigationController?.pushViewController(viewController, animated: true)
希望这有帮助。