【问题标题】:Know that a ViewController appears because of a Dismissal (not segue)知道由于 Dismissal(不是 segue)而出现 ViewController
【发布时间】:2013-02-12 14:31:48
【问题描述】:

我试图弄清楚如何在我的 rootViewController 中获取一个刚刚自行解散的类。我有几个选项可以关闭我的 rootViewController,我需要知道它是否来自一个实例,以便相应地更改一些 UI。

我正在寻找类似于 [self presentingViewController] 的东西,除了 viewController 由于解雇而不是 segue 而出现时。有没有内置的方法来抓取这个?

【问题讨论】:

  • 不是很清楚你想要什么。也许你可以检查这些方法:isMovingFromParentViewControllerisMovingToParentViewControllerisBeingDismissedisBeingPresented
  • 你不能使用segue有什么原因吗?展开转场对 is 来说非常有用,因为您可以获得正在执行的转场的 sourceViewController 属性..
  • 谢谢你们,这是完美的!

标签: iphone ios ipad segue dismiss


【解决方案1】:

我基本上通过跟踪我是否访问了我担心解雇的一个视图控制器来解决这个问题。那样的话,我只是在我继续之前在 viewController 中设置一个属性,所以我已经知道当我返回时我需要处理 UI 更改。感谢您提供关于 unwind segues 的 cmets。我肯定会在未来很快实施它们!

【讨论】:

    【解决方案2】:

    更新

    这个答案中的所有内容都是旧消息 - 从 XCode 4.5 开始,我们可以使用展开 segues 来返回任何以前的 viewController 并触发该控制器中的展开方法。 (感谢@rdelmar)

    What are Unwind segues for and how do you use them?


    旧方式/代码方式.. 理想情况下涉及委托来实现特定方法

    当一个类自行解散时,你不能抓住它,因为它被……解散了。您需要在它被解雇之前持有它,然后了解解雇。

    稍微详细说明一下,班级通常不会解雇自己,他们自己的班级会进行解雇。这里的混淆方法可以是 UIViewController 方法:

    - (void) dismissViewControllerAnimated:
    

    这是

    的简写
    - (void) [[self presentingViewController] dismissViewControllerAnimated:completion:nil]
    

    呈现的 viewController 有一个属性presentedViewController,它会保留该被解除的对象 - 直到它被解除。当presentingViewController 关闭时,它会将presentedViewController 属性重置为nil。但是您始终可以选择在解雇事件之前将该引用复制到另一个(强/保留)属性中,并在解雇事件之后对其进行询问。

    引用苹果:

    "如果要保留对接收者呈现的视图控制器的引用,请在调用 [dismissViewControllerAnimated:completion: ]。”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-29
      • 1970-01-01
      • 2019-01-22
      • 1970-01-01
      相关资源
      最近更新 更多