我有一个视图控制器,它是我窗口的根视图控制器的子视图控制器。该子视图控制器具有表视图,当我选择一行时,它告诉父视图控制器以模态方式呈现视图控制器。但是,模态视图控制器永远不会出现。我创建了一个裸骨测试视图控制器,只打印viewDidLoad
和viewWillAppear
。我注意到,当我致电parentVC.present(testVC, animated:true, completion:nil)
时,viewDidLoad
正在运行,但viewWillAppear
不是。只有在我以某种方式与UI交互时才会调用viewWillAppear
。无论是攻丝,平移,滚动还是其他什么。
我花了好几个小时试图调试它。它看起来似乎没有阻止主队列,而且我已经将问题简化为无聊的问题。在我再次与UI交互之前,简单地不会调用模态呈现的视图控制器viewWillAppear
。
可能导致这种症状的原因是什么?
答案 0 :(得分:0)
在评论中,您提到您使用
实例化视图控制器let vc = TestVC()
其中TestVC
可能是一个(基本上是空的)UIViewController
子类。
视图控制器需要通过故事板场景(使用instantiateViewController
),NIB创建的视图,或者在极少数情况下,您需要在loadView
中创建的视图(您不应该与viewDidLoad
混淆。
我建议创建一个故事板场景(假设您使用的是故事板),给它一个故事板ID,然后使用instantiateViewController
:
let vc = storyboard.instantiateViewController(withIdentifier: "foo")
但只是拥有一个名为UIViewController
的{{1}}子类并用TestVC
实例化它将无效。
在我们的讨论中,您说过您希望以编程方式执行此操作,不使用NIB或故事板。如果是,请使用loadView
。有关示例,请参阅https://stackoverflow.com/a/37964249/1271826。