我的应用程序中的产品详细信息页面的视图控制器中有一个共享按钮。通过按下共享按钮,然后在响应后调用一个API,我是模型呈现UIActivityViewController来共享URL和其他东西。问题在于,在某个阶段,api有时间获取共享数据,同时用户可以返回到上一个视图控制器或前进到另一个视图控制器。
我的问题是,如果我在演示时不在那个屏幕中,我怎么能停止呈现UIActivityViewController?我可能在导航的下一个屏幕上或向后移动。
如果 UIActivityViewController 出现在另一个屏幕上,我面临的另一个问题与上述情况有关,然后驳回使我的整个应用程序交互在 iOS 13 中被禁用,因为 UIDimming 类型视图出现在主 UIWindow 中,在关闭 UIActivityViewController 时不会关闭。
这是代码:
@IBAction private func toolbarShareStonesBtnPressed(_ sender: UIBarButtonItem) {
guard !isSharingInProgress else { return }
Utils.showLoading(forTargetVC: self)
isSharingInProgress = true
viewModel.getSelectedStonesShareLinks { [weak self] (errorMsg, shareURLs) in
guard let `self` = self else { return }
Utils.hideLoading(forTargetVC: self)
self.isSharingInProgress = false
if let errorMsg = errorMsg {
Utils.showAlert(withMessage: errorMsg)
} else if let shareURLs = shareURLs {
let activityViewController = UIActivityViewController(activityItems: shareURLs , applicationActivities: nil)
activityViewController.popoverPresentationController?.sourceView = self.view
if let popoverController = activityViewController.popoverPresentationController {
popoverController.barButtonItem = sender
popoverController.permittedArrowDirections = .any
}
self.present(activityViewController, animated: true, completion: nil)
}
}
}
我会说你是在倒退。点击按钮后,立即显示活动视图控制器。对于您的活动项,请使用 UIActivityItemProvider。
https://developer.apple.com/documentation/uikit/uiactivityitemprovider
这就是它的全部目的,当您的活动项目需要一些时间来获取数据时充当管道。这是一个操作,因此现在您可以在后台异步联网。同时,活动视图处于打开状态,除非用户放弃并取消导航,否则会阻止导航。