ViewController Modal Presentation没有出现

问题描述:

我有一个视图控制器,它是我的窗口的根视图控制器的子视图控制器。该子视图控制器具有表视图,当我选择一行时,它告诉父视图控制器以模态方式呈现视图控制器。但是,模态视图控制器从不出现。我创建了一个裸露的骨骼测试视图控制器,仅打印viewDidLoadviewWillAppear。我注意到的是,当我拨打parentVC.present(testVC, animated:true, completion:nil)时,viewDidLoad运行,但viewWillAppear不是。当我以某种方式与UI进行交互时,才会调用viewWillAppear。无论是点击,平移,滚动或其他。ViewController Modal Presentation没有出现

我花了数小时试图调试。看起来主队似乎并没有被阻挡,我已经将问题减少到了最基本的状态。直到我再次与UI交互之前,模态呈现的视图控制器的viewWillAppear根本不会被调用。

什么可能导致此症状?

+0

我们应该能够在没有代码的情况下猜出这个吗? –

+0

你可能已经在dispatch asynch队列中设置了这个'parentVC.present(testVC,animated:true,completion:nil)'。分享你的代码。 – Krunal

+0

@Rob主队列是我想到并检查的第一件事情。我把这个断言放在了好的位置,并且没有例外。它的主线。 –

在评论,你提到你与

let vc = TestVC() 

其中TestVC大概是一个(主要是空的)UIViewController子类的实例化视图控制器。

视图控制器需要或者通过或者故事板的场景(使用instantiateViewController)创建的视图,笔尖或在极少数情况下,您在loadView创建一个视图(你不应该与viewDidLoad混淆)。

我建议创建一个故事板场景(假设你使用故事板),给它一个故事板ID,然后用instantiateViewController

let vc = storyboard.instantiateViewController(withIdentifier: "foo") 

但仅仅有一个UIViewController子类,称为TestVC并用它实例TestVC()将无法​​正常工作。


在我们的讨论中,你说你想以编程的方式做到这一点,没有NIB或故事板。如果是这样,请使用loadView。一个例子见https://stackoverflow.com/a/37964249/1271826