微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从自定义 SwiftUI 视图中关闭共享扩展

如何解决从自定义 SwiftUI 视图中关闭共享扩展

我正在使用来自主要目标的自定义 SwiftUI 视图来从共享扩展的 ShareViewController 共享文档。在浏览三个视图后使用导航链接并共享文档。文档上传没有任何问题,但我不知道如何在上传完成后关闭视图。

这是导航的样子

ShareViewController(SLComposeServiceViewController) -> PropertyListView -> UnitListView -> UploadView

didPost 看起来像这样

override func didSelectPost() {
    print("In Did Post")
    if let item = self.extensionContext?.inputItems[0] as? NSExtensionItem{
        print("Item \(item)")
        print(item.attachments)
        print(item.attachments![0])
        let itemProvider = item.attachments![0]
        if itemProvider.hasItemConformingToTypeIdentifier("com.adobe.pdf"){
            itemProvider.loadItem(forTypeIdentifier: "com.adobe.pdf",options: nil) { (item,error) in
                if error != nil{
                    print(error!.localizedDescription)
                }else{
                    if let url = item as? URL{
                        print(url)
                        dispatchQueue.main.async{
                            //saving to user defaults
                            let dict: [String : Any] = ["dcument" :  url.absoluteString,"name" : self.contentText.isEmpty ? url.lastPathComponent : self.contentText!]
                            let savedata =  UserDefaults.init(suiteName:"group.in.pixbit.hijricalendar")
                            savedata?.set(dict,forKey: "sharedDocument")
                            savedata?.synchronize()
                        //loading swiftui view
                            let swiftuiView = NavigationView{PropertyListView()}
                            let vc = UIHostingController(rootView: swiftuiView)
                            let newView = vc
                            self.view.window?.rootViewController = newView
                            self.view.window?.makeKeyAndVisible()

                        }
                    }
                }
            }
        }
    }
}

解决方法

您需要在视图控制器的 completeRequest(returningItems:completionHandler:) 上调用 extensionContext

这是我的一个应用的代码片段:

  override func didSelectPost() {
    let artifact = Artifact(title: self.contentText,author: self.metaAuthor,url: url?.absoluteString ?? metaUrl ?? "",imageUrl: metaImage,siteName: self.siteName,dateAdded: Date(),excerpt: metaDescription,notes: "",tags: nil)
    self.artifactRepository?.addArtifact(artifact)
    
    self.extensionContext?.completeRequest(returningItems: [],completionHandler:nil)
  }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?