【问题标题】:Detect Child UIViewController being popped检测 Child UIViewController 被弹出
【发布时间】:2015-07-19 08:24:35
【问题描述】:

我相信这将是一个简单的答案,也许是我缺少实现的方法。如下:

在我的Controller1 中,我使用pushViewController 将新视图Controller2 推送到我的视图堆栈中。我得到了一个后退按钮。

现在,当在我的Controller1 中按下返回按钮时,我希望能够检测到Controller2 正在弹出,我们又回到了Controller1。有意义吗?

我试图用ViewDidAppear 来做这件事,但我不确定如何检测弹出的控制器。这里还有其他答案,但它们都在viewWillDisappearController2 中显示示例

我将如何在 Swift 中做到这一点?

【问题讨论】:

  • 解释由于这个触发器你想要做什么
  • @Wain 当推送到Controller2 时,我正在Controller1(放大地图)中执行一些其他操作。从Controller2回来时,我还需要缩小地图。地图控制仅在Controller1 中完成,我不想传递对 Controller2 的引用来进行缩小
  • 所以你有一张在显示 C2 时可见的地图?您使用的是自定义子演示文稿还是导航控制器?委派可能是合适的解决方案。
  • @Wain 是的,我有一张一直在屏幕上可见的地图。 Tableview 是独立的,总线我在导航堆栈的根视图控制器中引用了 tha 地图。我不想在其他地方传播这个参考。哪个控制器应该将什么委托给谁?你能详细说明一下吗?
  • C2 应该在完成时通知 C1,尽管听起来您的地图管理意味着 C1 应该同时呈现 C2 并处理“返回”请求,因为地图始终可见。

标签: ios swift uiviewcontroller


【解决方案1】:

如果不知道更多,您应该将第一个控制器的引用传递给第二个控制器,以便第二个控制器可以告诉第一个控制器何时完成(这是一个简单的委托关系,也可以使用块/闭包来实现)。

理想情况下,第一个控制器应该负责关闭第二个控制器,无论是在它收到此回调时,还是更恰当地说,直接在点击“关闭”按钮时。

【讨论】:

  • 如果第二个控制器的后退按钮被按下,第二个控制器怎么知道(调用委托)?
  • 如果它是一个返回按钮@bio,那么你在一个导航控制器中,所以你可以使用导航控制器委托或者只是视图会消失。
猜你喜欢
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-14
  • 2012-01-24
  • 2018-05-22
  • 1970-01-01
相关资源
最近更新 更多