【发布时间】:2021-03-09 09:40:29
【问题描述】:
我已经使用vc.modalPresentationStyle = .fullScreen 模态展示了一个 ViewController
但是当我尝试使用下面的代码获取最顶层的视图控制器时,它返回 nil。
func getTopViewController() -> UIViewController? {
var topController: UIViewController? = UIApplication.shared.keyWindow?.rootViewController
while topController?.presentedViewController != nil {
topController = topController?.presentedViewController
}
return topController
}
如果我使用 vc.modalPresentationStyle = .fullScreen 呈现它,这里 topController?.presentedViewController 返回 nil,如果我使用默认呈现样式,它工作正常。
有人遇到过同样的问题吗,不胜感激。
【问题讨论】:
-
UIApplication.shared.keyWindow?.rootViewController它返回 nil 吗? -
没有。 topController?.presentedViewController 返回 nil,即使显示了 vc
-
该功能将不起作用(可靠) - 因为模态呈现的视图控制器可以由 vc 链中的任何其他视图控制器呈现。因此,您的 rootViewController 的
presentedViewController可以为 nil,而实际上链中有一个视图控制器正在呈现另一个(不一定是您所追求的)。 -
但是如果我改变了演示风格,那么它就可以正常工作了
-
@christijk 你在用
UITabBarController吗?