【问题标题】:How to dismiss View Controller from another如何关闭另一个视图控制器
【发布时间】:2016-08-02 07:05:28
【问题描述】:

所以我有三个ViewControllers:A、B 和 C。我在 ViewControllerB 中有一个来自 firebase 的侦听器,当它被激活时,如果您当前在 ViewControllerC 中,它应该驳回ViewController C。但是,如果你在ViewController B,它不应该驳回ViewController A。我到目前为止的代码是:

 self.parentViewController?.dismissViewControllerAnimated(true, completion: nil)

ViewController B 的侦听器中。我遇到的问题是,如果我在ViewController B 中,它会忽略它。我应该在这个代码中添加什么(比如某种if 语句)来检查用户当前是否在他的设备上的ViewController C 中,然后关闭它,否则,什么也不做.

【问题讨论】:

  • 当你在那个视图控制器中时关闭监听器
  • 如果您在特定的视图控制器中,可以尝试将变量设置为某个值,并且仅当该变量具有特定值时才调用上述代码。
  • 简而言之,您的意思是视图 B 正在观察 Firebase。如果用户在视图 C 中并且视图 B 收到事件,则视图 C 应该关闭。如果他们在视图 B 或视图 A 中,则什么也不做。对吗?
  • 是的 Jay 先生,这是正确的,我仍然没有找到类似(“如果您当前在此视图控制器中,则关闭...”之类的方法)
  • 如何在您的 AppDelegate 或主视图控制器中实例化三个视图控制器。跟踪哪个 viewController 是活动的 - 这可以通过多种方式完成,但最简单的方法是在 prepareToSegue 中标记一个 appDelegate 变量。每当您从一个切换到另一个时,请更新变量。然后你总是知道用户在哪一个。然后当你收到 Firebase 事件时,轮询变量以查看使用 UIViewController 的位置,如果 activeViewController = C 则关闭它。

标签: swift firebase navigation


【解决方案1】:

也许你可以这样做:

if(self.parentViewController?.isKindOfClass(ClassToDismiss){}

【讨论】:

  • 嗨,这种“有点”工作但产生了很多错误。我正在考虑放弃使用父视图控制器并尝试其他方法,比如 if 语句,如果我当前在此视图控制器中,则关闭,否则什么也不做。
  • 或者可能因为视图控制器 b 正在呈现视图控制器 c,是否有类似的东西,如果视图控制器 c 是由 B 呈现的,那么就这样做,如果不是......只是吐槽想法,不确定是什么正确。
  • 也许如果你有一个保存前一个视图控制器的变量:var previousViewController = UIViewController(),所以在你展示另一个的 ViewController 中,执行 viewcontroller.previousViewController = self。
猜你喜欢
  • 1970-01-01
  • 2017-02-03
  • 2014-12-12
  • 1970-01-01
  • 1970-01-01
  • 2014-05-07
  • 2016-11-20
  • 1970-01-01
  • 2021-11-09
相关资源
最近更新 更多