【问题标题】:iOS (Swift): Presenting View Controller Embedded in Navigation ControlleriOS(Swift):呈现嵌入在导航控制器中的视图控制器
【发布时间】:2018-11-09 20:40:53
【问题描述】:

我有一个嵌入在UINavigationController 中的UIViewController (AVC)。 AVC(以模态形式出现)转至另一个 UIViewControllerBVC)。在BVC 内部,变量self.presentingViewController 的类型是可选的NavigationController,而不是我所期望的AVC

我必须将第一个childViewControllers 转换为AVC,如下所示:

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

为什么self.presentingViewController 不像我预期的那样,即AVC

非常感谢。

【问题讨论】:

    标签: ios swift uiviewcontroller uinavigationcontroller segue


    【解决方案1】:

    访问它

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

    //

    From Docs

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

    【讨论】:

    • 感谢您的回复。但我的问题是为什么?为什么presentingViewController 不是AV 类型?
    • 好的 - 所以我从AVC 以模态方式呈现BVC。那么为什么这个属性是NavigationController而不是AVC呢?
    • 因为 AVC 不是模态呈现的,看看你是否试图呈现一个 VC 说它的名字是来自 BVC 的 CVC,那么 CVC 的 self.presentingViewController 将是 BVC,因为 BVC 是模态呈现的,,
    猜你喜欢
    • 2014-10-09
    • 1970-01-01
    • 2014-05-11
    • 2021-01-03
    • 1970-01-01
    • 2017-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多