【问题标题】:Push View Controller from Presenting View Controller从呈现视图控制器推送视图控制器
【发布时间】:2018-01-16 21:14:53
【问题描述】:

我有一个视图控制器,它以模态方式呈现一个表视图控制器。在呈现的表视图控制器的 didSelectRowAt 方法中,我实例化了另一个视图控制器。我想关闭呈现的视图控制器并让呈现的视图控制器推送这个新的视图控制器。

我可以以某种方式使用它吗?

self.presentingViewController?.navigationController?.pushViewController(newVC, animated: true)

【问题讨论】:

  • 所以你想关闭模态视图控制器并将视图控制器推送到同一个模态视图控制器上?我想我在这里遗漏了一些东西,因为这没有意义(因为它是非标准的 iOS 行为,因此会让用户感到困惑)。
  • 当在模态视图中进行选择时,我想从呈现模态视图的视图中推送一个视图控制器
  • didSelectRowAt 怎么样?所以模态表视图控制器首先出现,然后用户点击一个单元格,然后你想从非模态父视图控制器呈现一些东西???
  • 你也想关闭你的 tableViewController 吗?
  • @UmairAamir 是的

标签: ios swift modalviewcontroller pushviewcontroller


【解决方案1】:

我想关闭呈现的视图控制器并让呈现的视图控制器推送这个新的视图控制器。

模态视图控制器通常代表某种问题,例如你想看什么照片?你想和哪个联系人交谈?模态视图控制器应该让用户指出一个答案,然后它应该将该答案返回给它的父级,即呈现控制器。该呈现视图控制器应该负责下一步该做什么。关闭模态控制器?调整数据模型?将新控制器推入导航堆栈?

将呈现视图控制器和模态控制器之间的关系视为雇佣协议,其中呈现控制器是经理,模态控制器是工人。工人可能会在经理的要求下做一些任务,然后报告回来,以便经理可以决定下一步做什么。但是工人不会告诉经理该做什么——那不是工人的工作。

【讨论】:

  • 我的展示控制器是一个地图视图,而模态控制器是一个表格视图,显示地图上的位置列表。我和一个代表一起工作。谢谢。
【解决方案2】:

不,使用委托通知呈现视图控制器关闭模式并像这样进行推送是行不通的

  self.dismiss(animated: false, completion: nil)

  let vc = self.storyboard?.instantiateViewController(withIdentifier: "identifier")

   self.navigationController?.pushViewController(vc!, animated: true)

【讨论】:

    【解决方案3】:

    您必须设置一个委托,或使用其他方式告诉视图控制器的父级将其关闭并呈现新的视图控制器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-28
      • 1970-01-01
      • 2016-10-22
      • 2011-01-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多