我有以下代码将UICloudSharingController导入到快速UI中,但是在第一次集成时,它仅显示一个永不停止的 Activity 指示器,然后在第二次显示时(通过.sheet),没有 Activity 指示器。第一次使用时,我可以看到右上角带有 Activity 指示器的关闭按钮。对于任何反馈,我们都表示感谢。
struct CloudSharingController: UIViewControllerRepresentable {
typealias UIViewControllerType = UICloudSharingController
func makeCoordinator() -> Coordinator {
Coordinator(self)
}
class Coordinator: NSObject, UICloudSharingControllerDelegate {
func cloudSharingController(_ csc: UICloudSharingController, failedToSaveShareWithError error: Error) {
print("asdf")
}
func itemTitle(for csc: UICloudSharingController) -> String? {
return "item title for sharing TTT"
}
var parent: CloudSharingController
init(_ cloudSharingController: CloudSharingController) {
self.parent = cloudSharingController
}
}
var share: CKShare? = nil
var container: CKContainer = CKContainer.default()
var firsTimeBlock: ((UICloudSharingController, @escaping (CKShare?, CKContainer?, Error?) -> Void) -> Void)? = nil
func makeUIViewController(context: UIViewControllerRepresentableContext<CloudSharingController>) -> CloudSharingController.UIViewControllerType {
let result: UICloudSharingController!
if let validFirstBlock = firsTimeBlock {
return UICloudSharingController(preparationHandler: validFirstBlock)
} else if let validShare = self.share {
return UICloudSharingController(share: validShare,
container: container)
} else {
fatalError()
}
result.availablePermissions = [.allowReadWrite]
// result.popoverPresentationController?.sourceView = AccountsView
result.delegate = context.coordinator
return result
}
func updateUIViewController(_ uiViewController: CloudSharingController.UIViewControllerType, context: UIViewControllerRepresentableContext<CloudSharingController>) {
}
}
最佳答案
我找到了可以在这里找到的解决方法:
https://gist.github.com/arashkashi/bcffde1e35c7e406de52d9dff0127d41
简而言之,该解决方案包括一个 View Controller 包装器,该包装器包含一个UICloudSharingController
实例作为 subview Controller 。UICloudSharingController
有两种初始化方法:一种是在没有CKShare
的情况下初始化的;另一种是已经将CKShare
推送到CloudKit的方法。我观察到前一个初始化器提供了一个永无止境的 Activity 指示器。所以我做了什么,我没有参与者的情况下手动推送了共享,然后将空共享提供给第二个初始化的UICloudSharingController
。
这就是包装 Controller 应具有以下行的原因:
var share: CKShare? = nil
关于controller - UICloudSharingController在Xcode 11中显示无限事件指示,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57310673/