iOS (Swift):呈现嵌入导航控制器的视图控制器

3
我有一个嵌入在UINavigationController中的UIViewController (AVC)。通过模态方式,AVC 转场到另一个UIViewController (BVC)。在BVC内,变量self.presentingViewController的类型是可选的NavigationController,而不是我预期的AVC
我需要将第一个childViewControllers进行向下转型,转为一个AVC,代码如下:
let pvc = self.presentingViewController
if let avc = pvc?.childViewControllers.first as? AVC {
    // ...
}

为什么self.presentingViewController不像我期望的那样是一个AVC

非常感谢。

1个回答

2

访问它

if let pvc = self.presentingViewController as? UINavigationController {
    if let avc = pvc.viewControllers.first as? AVC {
       // ...
    }
}

//

来自文档

当您使用present(_:animated:completion:)方法以模态方式呈现视图控制器(显式或隐式)时,被呈现的视图控制器的此属性设置为呈现它的视图控制器。如果该视图控制器没有以模态方式呈现,但其祖先之一是,则此属性包含呈现祖先的视图控制器。如果当前视图控制器或其任何祖先均未以模态方式呈现,则此属性中的值为nil。


谢谢您的回复。但我的问题是为什么?为什么presentingViewController不是类型AV - ajrlewis
好的 - 所以我从AVC模态呈现BVC。那么为什么这个属性是NavigationController类型而不是AVC类型? - ajrlewis
2
因为 AVC 没有以模态方式呈现,所以如果您尝试从 BVC 呈现名为 CVC 的 VC,则 CVC 的 self.presentingViewController 将是 BVC,因为 BVC 是以模态方式呈现的。 - Shehata Gamal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接