gpt4 book ai didi

cocoa-touch - 如何关闭在 UIStoryboard 中呈现的模态框?

转载 作者:行者123 更新时间:2023-12-03 08:45:40 25 4
gpt4 key购买 nike

设置:我设置了一个 Storyboard,有两个简单的 View Controller A 和 B。A 中有一个按钮,它通过模态 segue 转换到 B。 B 在 A 之上呈现模态转换。这很好。

问题:有没有办法用一些简单的 Storyboard魔法让 B 离开并回到 A?

请注意,如果这一切都在导航 Controller 中,并且我使用了推送转场,则导航 Controller 将隐式处理它。会有一个“返回”按钮。没有可比的模态,我需要自己构建 UI,这很好,但我想知道是否有一个 segue 机制我可以用来发出从 B 到 A 的信号。

现在从 B 到 A 的 oldskool 构建方法是:

  • 在 B
  • 上创建委托(delegate)属性
  • 当模态转换segue播放时将A设置为B的代表(我可以使用prepareForSegue:sender:在A的代码中 Hook )
  • 当该解雇时,B 向其代表
  • 发出信号
  • A 实现了一个解除 B
  • 的委托(delegate)方法

    这行得通,但感觉开销太大而且很愚蠢。

    是否有一些我错过的 UIStoryboard 机制,基本上会执行“反向模态搜索”?

    最佳答案

    在不编写至少一点代码的情况下关闭模态视图 Controller 没有任何 Storyboard魔法。

    但是,虽然您确实必须实现一些自己的代码,但您不一定要那么麻烦。您可以在 View Controller B 中有一个调用 [self dismissViewControllerAnimated:YES completion:nil] 的按钮. (文档说呈现 View Controller 应该被解雇,但他们还说,如果在被呈现者上调用消息,消息将被转发到呈现 View Controller 。如果你想更明确地说明它 - 而且你在某些情况下需要这样做,例如当一个模态视图 Controller 从另一个模态视图 Controller 呈现时——您可以使用 self.presentingViewController 显式引用演示者并从那里调用 dismiss...。)

    您会在某些应用程序中看到委托(delegate)业务,因为它是通知 View Controller A 用户在 View Controller B 中所做的任何事情的一种方式......但这不是唯一的方式。在使用 self.presentingViewController 引用 A 之后,有 KVO、通知或只是简单地调用 A 的方法(假设 B 知道它总是由 A 呈现)。如果 A 不需要知道 B 中发生了什么(例如,因为用户点击了取消按钮),则无需执行任何操作——您只需关闭模式并完成它即可。

    在 iOS 6 及更高版本中,展开转场添加了另一个选项,提供了一点“ Storyboard魔法”来解除模态视图 Controller (或以其他方式“退出”一系列转场)。但是这种方法仍然需要一些代码——你不能完全在 Storyboard中设置它。不过,从好的方面来说,该代码提供了一条从被关闭的 View Controller (B) 到呈现它的 View Controller (A) 获取信息的路径。

    苹果有a tech note about unwind segues详细介绍了它们,但这是简短的版本:

  • 定义 IBAction您想要展开的 View Controller 类上的方法 - 呈现模态视图 Controller 的类,而不是模态视图 Controller 本身(您的问题中的 View Controller A)。不同于普通 IBAction方法,这些应该采用 UIStoryboardSegue * 类型的参数;例如
    - (IBAction)unwindToMainMenu:(UIStoryboardSegue*)sender
  • 在呈现的 View Controller (问题中的 B)中,将控件连接到绿色的退出图标,然后选择您定义的方法。
  • 在你的 unwind 方法实现中,可以引用 segue 的 sourceViewController从被关闭的 View Controller 中检索信息。您无需调用dismissViewControllerAnimated:completion:因为 segue 处理关闭即将消失的 View Controller 。
  • 关于cocoa-touch - 如何关闭在 UIStoryboard 中呈现的模态框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9732499/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com