首页 > 解决方案 > 在后退按钮单击时始终显示加载程序

问题描述

我正在为导航返回操作创建一个自定义按钮。并在后退按钮单击时,推送未推送的不同视图控制器。后面的动作工作正常,但显示的加载器并不一致。这种情况的最佳做法是什么?

反作用代码如下:

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

标签: iosxcode11swift5

解决方案


通过以下方式解决了更改 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)
                        }
                    }
                }
            }
        }
    }

推荐阅读