【问题标题】:Swift presentViewController from superclass doesn't work来自超类的 Swift presentViewController 不起作用
【发布时间】:2015-11-03 14:32:08
【问题描述】:

我有一个超类,它有一个应该在子类上呈现视图控制器的函数。我有两个来自超类的子类,它应该出现在当前可见的任何一个上。目前它只从其中一个呈现,并且仅在可见时呈现。

骨架代码:

class Superclass : UIViewController {
    func somethingHappened() {
        if let navigation = self.navigationController {
            navigation.presentViewController(controllerToPresent, animated: true, completion: { () -> Void in
                // Stuff
            })
        } else {
            self.presentViewController(controllerToPresent, animated: true, completion: { () -> Void in
                // Stuff
            })
        }
    }
}

我的一个视图控制器SubclassA 是导航控制器的根视图控制器,它通过函数的else。另一个SubclassB 被推到SubclassA 上,并且通过第一部分。 SubclassB 是唯一成功呈现视图控制器的视图控制器。

controllerToPresent 也不为零。

Warning: Attempt to present <UINavigationController> on <SubclassB> whose view is not in the window hierarchy!

【问题讨论】:

  • 好的,你的问题是什么?
  • 为什么SubclassA 上的视图控制器不显示,我该如何解决?

标签: ios swift inheritance


【解决方案1】:

警告试图告诉您的是,您正在对 SubclassA 的实例调用方法 presentViewController:animated:completion:,但该 SubclassA 实例的视图不在视图层次结构中。

可以解决您的问题的方法是在显示视图控制器之前将视图添加到视图层次结构中,例如,通过调用

view.addSubview(<InstanceOfSubclass>.view)

【讨论】:

  • 这对我来说没有意义......视图是可见的并且已经可见至少 10 秒.. 为什么它会尝试在不再存在的视图上调用它而不是比那里的那个?
  • 也许你在另一个视图不可见的实例上调用它。我需要更多细节来帮助你......你可以通过检查它的超级视图是否不为零来检查它是否在视图层次结构中
猜你喜欢
  • 2017-06-18
  • 2016-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-14
  • 2013-07-22
  • 2018-11-10
相关资源
最近更新 更多