【问题标题】:Dismiss presented view controller, after the presenting view controller has been released在展示视图控制器被释放后,关闭展示的视图控制器
【发布时间】:2017-02-21 08:39:38
【问题描述】:

我正在编写一些不是我编写的旧代码,而且它的架构确实不太好......

情况是视图控制器以模态方式呈现自定义视图控制器,但是每 30 秒重新创建呈现视图控制器。

这里的问题是,如果模态在发生这种情况时显示在屏幕上,那么任何消除它的努力都会导致奇怪的行为(例如白屏)。

我已尝试在新重新创建的控制器上调用 [self.presentedViewController dismissViewControllerAnimated];,但 presentedViewController 与您预期的一样为零。

我还尝试保持对模态视图控制器的弱引用,然后在重新加载呈现的 VC 时,将此值设置为旧 VC 的值。这让我可以调用self.customModalVC dismissViewControllerAnimated];,但这会导致前面提到的白屏,可能是因为它显示的 VC 不再在堆栈中?

任何和所有建议都表示赞赏。

【问题讨论】:

  • 为什么每 30 秒重新创建一次?这对我来说听起来有点奇怪。我现在还看到了在不保留对它的引用的情况下保持此模态视图呈现的方法,这可能会导致内存问题,因为您需要保留对持有它的 viewController 的引用。所以你最好的选择听起来像是重构/改变它。
  • 这是由于网络调用,我同意这是一种完全愚蠢的做法。不会是我的方法。看起来我除了重构之外真的没有太多选择...... PM 会喜欢 4h 票去 3d 票哈哈。
  • 是的,这听起来很有趣。

标签: ios objective-c uiviewcontroller uinavigationcontroller presentmodalviewcontroller


【解决方案1】:

尝试将导航控制器传递给新呈现的 ViewController:

    presentedVC.navigation = self.navigationController

将此添加到新创建的以关闭

    self.dismiss(animated: false) { 
                _ = self.navigation?.popViewController(animated: true)
            }

【讨论】:

  • navigationController 的属性 UIViewController 是只读的。
  • 此外,模态展示在导航堆栈中是互斥的,因此没有“弹出”和“推送”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-01
  • 2014-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-02
  • 2011-12-07
相关资源
最近更新 更多