【问题标题】:ViewController Modal Presentation not appearingViewController 模态演示没有出现
【发布时间】:2018-01-17 15:31:55
【问题描述】:

我有一个视图控制器,它是我的窗口根视图控制器的子视图控制器。该子视图控制器有一个表格视图,当我选择一行时,它会告诉父视图控制器以模态方式呈现视图控制器。然而,模态视图控制器永远不会出现。我创建了一个简单的测试视图控制器,它只打印viewDidLoadviewWillAppear。我注意到当我调用parentVC.present(testVC, animated:true, completion:nil) 时,viewDidLoad 运行,但viewWillAppear 没有运行。 viewWillAppear 只有在我以某种方式与 UI 交互时才会被调用。无论是点击、平移、滚动还是其他。

我已经花了几个小时试图调试它。主队列似乎没有被阻塞,我已经将问题简化为最基本的问题。模态呈现的视图控制器的viewWillAppear 在我再次与 UI 交互之前不会被调用。

什么可能导致这种症状?

【问题讨论】:

  • 我们应该不用代码就能猜到吗?
  • 你可能已经在调度异步队列中设置了这个parentVC.present(testVC, animated:true, completion:nil)。分享您的代码。
  • @Rob 主队列是我想到并检查的第一件事。我把这个断言放进去是为了很好的衡量,没有例外。它在主线程上。
  • @Rob 没有。不。只是:``` func present() { dispatchPrecondition(condition: .onQueue(.main)) let vc = TestVC() present(vc, animated: true, completion: nil) } ``
  • 没有。我只是在构建一个测试 VC。我想知道本地vc 是否超出范围会发生什么?虽然后来当我与屏幕交互时 viewWillAppear 被调用,所以 vc 显然没有被释放。

标签: ios uiviewcontroller uikit modalviewcontroller


【解决方案1】:

在 cmets 中,您提到您正在使用

实例化您的视图控制器
let vc = TestVC()

TestVC 大概是一个(大部分为空的)UIViewController 子类。

视图控制器需要通过情节提要场景(使用instantiateViewController)、NIB 或在极少数情况下通过loadView 创建的视图(不要与@987654329 混淆)创建视图@)。

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

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

但是仅仅拥有一个名为TestVCUIViewController 子类并用TestVC() 实例化它是行不通的。


在我们的讨论中,您说您希望以编程方式执行此操作,而无需 NIB 或情节提要。如果是这样,请使用loadView。示例见https://stackoverflow.com/a/37964249/1271826

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-15
    • 1970-01-01
    • 2021-10-26
    • 2014-06-26
    • 2018-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多