0

在产品详细信息页面的视图控制器中,我的应用程序中有一个共享按钮。通过按下共享按钮,一个在响应后调用的 API,我正在展示 UIActivityViewController 以共享 URL 和其他内容。问题是在某些阶段 api 有时间获取共享数据,同时用户可以返回到以前的视图控制器或前进到另一个视图控制器。

我的问题是,如果 UIActivityViewController 将要呈现时我不在该屏幕中,我该如何停止呈现?我可能在导航中的下一个屏幕上或向后移动。

如果 UIActivityViewController 在上述情况下出现在另一个屏幕上,那么我面临的另一个问题是,由于 UIDimming 类型的视图出现在主 UIWindow 中,而在解除 UIActivityViewController 时没有被解除,因此我将在 iOS 13 中解除我的整个应用程序交互。

这是代码:

@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)
        }
    }
}
4

1 回答 1

2

我会说你这样做是向后的。当点击按钮时,立即呈现活动视图控制器。对于您的活动项目,请使用 UIActivityItemProvider。

https://developer.apple.com/documentation/uikit/uiactivityitemprovider

这就是它的全部目的,当您的活动项目需要一些时间来获取数据时充当管道。这是一个操作,所以现在您可以在后台异步联网。同时,活动视图已启动,除非用户放弃并取消它,否则将阻止导航。

于 2019-12-10T06:53:34.880 回答