gpt4 book ai didi

ios - Swift:DismissViewController() 和关闭键盘的线程问题

转载 作者:行者123 更新时间:2023-11-30 14:16:58 25 4
gpt4 key购买 nike

我将一些数据发送到我的服务器,并在收到响应后关闭我的 View Controller 。在 viewController 的 viewWillDisappear() 中,我尝试关闭键盘。

如果 PresentER viewController 不是 Root View Controller ,我会收到异常“[UIKeyboardTaskQueue waitUntilAllTask​​sAreFinished] 只能从主线程调用。”。我尝试调用一个函数来关闭键盘,然后关闭 View Controller (消除对 viewwilldisappear() 的需要),但它也有同样的问题。

代码: //在呈现的 View Controller 内

override func viewWillDisappear(animated: Bool)
{
super.viewWillDisappear(animated)
self.view.endEditing(true)
}

代码://在presentER View Controller 内

func manage_response(//)
{
run_on_background_thread
{
self.parse(//)
run_on_main_thread
{
self.presented_controller.dismissViewControllerAnimated(true, completion: nil)

}
}
}

我所看到的一切都表明这是处理这种情况的方法。仅当我显示键盘并尝试使用其各自的 View Controller 将其关闭时,该问题才存在。

编辑:

我用于线程的尾随方法函数的语法:

func run_on_background_thread(code: () -> Void)
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), code)
}

func run_on_main_thread(code: () -> Void)
{
dispatch_async(dispatch_get_main_queue(), code)
}

解决方案:

我已经找到了这个问题。这个案例与之前的想法不同。当我尝试显示 UIAlertController (通过presentViewController)时会发生这种情况,因为查询没有返回正确的数据/凭据。

run_on_main_thread
{
if let controller = visibleViewController() //recursive
{
controller.view.endEditing(true)
controller.presentViewController(alert, animated: true, completion: nil)
}
}

最佳答案

您应该尝试以这种方式在主队列中消除它:

dispatch_async(dispatch_get_main_queue()) {
self.presented_controller.dismissViewControllerAnimated(true, 完成: nil)
}

关于ios - Swift:DismissViewController() 和关闭键盘的线程问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31034904/

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