ios - 在后退按钮单击时始终显示加载程序
问题描述
我正在为导航返回操作创建一个自定义按钮。并在后退按钮单击时,推送未推送的不同视图控制器。后面的动作工作正常,但显示的加载器并不一致。这种情况的最佳做法是什么?
反作用代码如下:
@objc func backAction() -> Void {
self.showLoader { (status) in
if status {
DispatchQueue.main.async {
if let viewController = UIStoryboard(name: DFViewControllerNameConstant.MAIN, bundle: nil).instantiateViewController(withIdentifier: DFViewControllerNameConstant.DF_PREVIEW_ALL_TOUR_VIEW_CONTROLLER) as? DFPreviewAllPublishedCapturePanoramaViewController {
if let navigator = self.navigationController {
navigator.pushViewController(viewController, animated: true)
}
}
}
}
}
}
Show and remove loader 的代码是:
import UIKit
fileprivate var loaderView: UIView?
extension UIViewController {
func showLoader(completion: @escaping ((Bool)->())) {
loaderView = UIView(frame: self.view.bounds)
loaderView?.backgroundColor = UIColor.init(red: 0.4, green: 0.4, blue: 0.4, alpha: 0.4)
let loader = UIActivityIndicatorView(style: .white)
loader.center = loaderView!.center
loader.startAnimating()
loaderView?.addSubview(loader)
self.view.addSubview(loaderView!)
UIApplication.shared.beginIgnoringInteractionEvents()
completion(true)
}
func removeLoader() {
loaderView?.removeFromSuperview()
loaderView = nil
UIApplication.shared.endIgnoringInteractionEvents()
}
}
解决方案
通过以下方式解决了更改 backAction() 的问题:
@objc func backAction() -> Void {
DispatchQueue.main.async {
self.showLoader()
DispatchQueue.main.async {
if let viewController = UIStoryboard(name: DFViewControllerNameConstant.MAIN, bundle: nil).instantiateViewController(withIdentifier: DFViewControllerNameConstant.DF_PREVIEW_ALL_TOUR_VIEW_CONTROLLER) as? DFPreviewAllPublishedCapturePanoramaViewController {
DispatchQueue.main.async {
if let navigator = self.navigationController {
navigator.pushViewController(viewController, animated: true)
}
}
}
}
}
}
推荐阅读
- c# - 在搜索过程中忽略空值的 C# LINQ 实体框架查询
- vb.net - vb.net 内插字符串
- sql - 通过考虑oracle sql中的最大日期进行动态透视
- resources - 在 Wicket 9.x 中,如何通过 Behavior renderHead(Component component, IHeaderResponse response) 包含 javascript 和 css?
- acumatica - 添加新项目时未插入子 DAC
- jenkins - 具有声明性 Jenkins 管道的主动选择参数
- python - 使用 Python 从打印按钮下载文件
- single-sign-on - OpenAM 跨域 cookie 'Iplanetdirectorypro' 作为 IIS 的响应而过期
- oauth - 我们真的需要 client_secret 来获取 PKCE 流上的 access_token 吗?
- ruby-on-rails - 仅远程环境中的 Capybara 错误