【问题标题】:Accessing parent view from modal segue Swift从模态 segue Swift 访问父视图
【发布时间】:2015-09-03 10:02:33
【问题描述】:

我有一个视图控制器 - NewsController,它有一个模式 segue 到 NewsDetailController

NewsDetailController 我正在尝试运行以下函数:

@IBAction func greenLikeClick(sender: AnyObject) {

    if let parentVC = self.parentViewController as? NewsController {
        parentVC.newslists[loadsection][loadrow].liked = false
    }
}

但这行不通。

这里NewsControllerNewsDetailController之间是否存在父子关系?

如果是这样,为什么我的方法不起作用?

如果没有,我将如何处理?

【问题讨论】:

    标签: ios swift segue parent-child


    【解决方案1】:

    您应该在您的NewsDetailController 中使用self.presentingViewController 来获取您的NewsController。来自文档:

    当您使用 presentViewController:animated:completion: 方法以模态方式(显式或隐式)呈现视图控制器时,呈现的视图控制器将此属性设置为呈现它的视图控制器。

    【讨论】:

    • 我用self.presentingViewController 替换了self.parentViewController ...不幸的是没有运气
    • 做了一个简单的小例子,这行得通。你的segue到底是什么类型的?
    • 这是一个Present Modally segue。这会导致任何问题吗?抱歉,如果您感到困惑,请切换 SO 帐户。我的错。
    • 不,没关系,它应该是一个 Present Modally Segue。至少,您能否给您的 newsController 一个标题并将其记录在您的 NewsDetailController 中? presentingViewController.title?
    • 我发现了问题所在。 presentingViewController 给了我我的主选项卡控制器,其中包含 NewsController 作为一个孩子。所以我说let childOfTab = parentVC.childViewControllers[0] as! NewsController 并改用它。感谢大家的帮助!
    【解决方案2】:

    当我的 segue 被推送时,我是这样做的:

    if let presenter = self.navigationController?.viewControllers[0] as? MainViewController {
            // access presenters members
    
    }
    

    当我的 segue 出现时,就像这样:

    if let presenter = self.presentingViewController?.children[0] as? MainViewController  {
            // access presenters members
    }
    

    如果您有多个子项或视图控制器索引,则应管理该索引。我的是单身,所以 0 成功了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-30
      • 1970-01-01
      • 1970-01-01
      • 2013-02-25
      • 1970-01-01
      • 1970-01-01
      • 2018-05-11
      • 2013-10-24
      相关资源
      最近更新 更多