我有以下代码将 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>) {
}
}
我找到了一个可以在这里找到的解决方法:
https://gist.github.com/arashkashi/bcffde1e35c7e406de52d9dff0127d41 https://gist.github.com/arashkashi/bcffde1e35c7e406de52d9dff0127d41
简而言之,该解决方案包括一个视图控制器包装器,其中包含一个实例UICloudSharingController
作为子视图控制器。
UICloudSharingController
有两个,没有的时候初始化一个CKShare
和另一个你已经拥有的CKShare
推送到 CloudKit。我观察到前一个初始化程序给出了一个永无止境的活动指示器。所以我做了什么,我手动推送没有参与者的共享,然后将空共享提供给第二个初始化的共享UICloudSharingController
.
这就是包装控制器应该有这一行的原因:
var share: CKShare? = nil
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)