Ara*_*ash 6 controller sharing cloudkit ios13 swiftui
我有以下代码将 UICloudSharingController 导入 swift UI,但是当第一次集成时,它只显示一个永不停止的活动指示器,然后第二次显示它(通过 .sheet),没有活动指示器。第一次我可以看到带有活动指示器的右上角的关闭按钮。对于任何反馈,我们都表示感谢。
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>) {
}
}
Run Code Online (Sandbox Code Playgroud)
我找到了一个解决方法,可以在这里找到:
https://gist.github.com/arashkashi/bcffde1e35c7e406de52d9dff0127d41
简而言之,该解决方案包括一个视图控制器包装器,其中包含一个UICloudSharingController
作为子视图控制器的实例。
UICloudSharingController
有两个初始化的,一个是没有的CKShare
,另一个是你已经CKShare
推送到 CloudKit 的。我观察到前一个初始化程序给出了一个永无止境的活动指示器。所以我所做的是手动推送没有参与者的共享,然后将空共享提供给第二个初始化的UICloudSharingController
.
这就是包装控制器应该有这一行的原因:
var share: CKShare? = nil
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
624 次 |
最近记录: |