gpt4 book ai didi

ios - `UIViewController.present` 立即调用完成处理程序

转载 作者:行者123 更新时间:2023-12-01 17:46:42 25 4
gpt4 key购买 nike

我使用的是 Xcode 10 Beta 6,所以这可能只是一个错误。


我正在尝试将 View Controller (colorPickerController) 呈现为弹出窗口。在该 View Controller 中,我将能够设置一些属性,我想在弹出窗口关闭后读取这些属性。

代码如下:

Code

在第 93...97 行中,我定义了一个完成处理程序。
在第 99 行中,我以模态方式呈现了 colorPickerController,包括完成处理程序。


运行代码时,颜色选择器 Controller 成功显示在弹出窗口中。但是当我在弹出窗口外点击(关闭它)时,没有调用回调。

我想也许 UIPopoverPresentationController 不会“正常”关闭,所以我尝试通过在 中调用 dismiss 手动关闭弹出框popoverPresentationControllerShouldDismissPopover(第 110 行)。

现在这仍然没有用,所以我设置了一个断点,如图所示,以检查委托(delegate)方法是否被调用。
那时我注意到,在运行应用程序时,完成处理程序会在弹出窗口出现时立即调用,而不是在弹出窗口消失时调用。
我正在记录 Completion handler was called. 在控制台中,甚至在到达断点之前。

这怎么可能?

最佳答案

您的代码在您的问题中的方式,您的 updateColor 闭包仅在 presentation 动画完成时被调用,而不是在您呈现的 View Controller 完成时被调用无论它需要做什么。

请参阅 UIViewController.present(_:animated:completion:) 的文档: https://developer.apple.com/documentation/uikit/uiviewcontroller/1621380-present

completion

The block to execute after the presentation finishes. This block has no return value and takes no parameters. You may specify nil for this parameter.

注意“演示结束后”(强调我的)。这意味着闭包将在从屏幕底部开始动画显示新 View Controller 的 0.2 秒后立即执行(或者无论花费多长时间,如果您正在做一些花哨的话,以任何方式)自定义演示动画)。

要在你的新 View Controller 完成它需要做的任何事情时获得回调,子类化 UIViewController(称它为 ColorPickerViewController),并使用委托(delegate)某种通知您当前的 View Controller 关闭颜色选择器 View Controller (并且,大概是告诉它选择了什么颜色)。

关于ios - `UIViewController.present` 立即调用完成处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51920284/

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