gpt4 book ai didi

ios - 从其他 ViewController 呈现 ViewController 时是否需要调用 DispatchQueue

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

我正在尝试展示 UIActivityViewController通过将其包含在帮助程序类中,在我的应用程序的多个部分中。以下代码运行良好,我可以调用 showActivityController()来自我应用程序中任何其他 View Controller 的方法,以及 UIActivityViewController按预期呈现。

我的问题是,我真的需要附上代码来呈现 UIActivityViewControllerDispatchQueue.main.async 内如下所示?

我在没有它的情况下尝试了它,它工作正常,但我想确保将它留在那里不会在以后造成任何问题。

class HelperClass: UIViewController, UIActivityItemSource{
static let shared = HelperClass()

func showActivityController(){
DispatchQueue.main.async {
let items = [self]
let activityController = UIActivityViewController(activityItems: items, applicationActivities: nil)
UIApplication.shared.keyWindow?.rootViewController?.present(activityController, animated: true)
}
}

func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any {
return "Return Type"
}

func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivity.ActivityType?) -> Any? {
if activityType == .message{
return "Text for iMessage"
}else if activityType == .mail{
return "Text for Email"
}else{
return "Text for all other apps"
}
}
func activityViewController(_ activityViewController: UIActivityViewController, subjectForActivityType activityType: UIActivity.ActivityType?) -> String {
return "Email Subject"
}
}

其他 View Controller 的使用
HelperClass.shared.showActivityController()

最佳答案

仅在主线程中时不需要。所以写DispatchQueue是多余的

但是,如果您想从另一个线程呈现,则必须使用 DispathchQueue 呈现 UI。

假设,您正在进行网络调用,并且在网络调用完成后,您必须显示 UI

从我的角度来看,您应该从方法中删除调度队列。

func showActivityController(){
let items = [self]
let activityController = UIActivityViewController(activityItems: items, applicationActivities: nil)
UIApplication.shared.keyWindow?.rootViewController?.present(activityController, animated: true)
}

但是当你必须从其他线程呈现 UI 时,只需调用主线程中的方法
DispatchQueue.main.async {
HelperClass.shared.showActivityController()
}

关于ios - 从其他 ViewController 呈现 ViewController 时是否需要调用 DispatchQueue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61936002/

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