Swift 5活动指示器未显示

问题描述 投票:0回答:1

我已经检查了其他问题/答案,但没有一个对我有用。

我有很多视图控制器,它们在准备序列时从数据库中加载数据。因此,我将活动指示器如下:

func tableView / collectionView(didSelectRow / item){...

self.showSpinner()
self.performSegue(...) -> prepare(for segue...)  : data gets loaded
self.removeSpinner()

}

具有在]中定义的功能>

import UIKit

var aView : UIView?

extension UIViewController{

    func showSpinner(){
        aView = UIView(frame: self.view.bounds)
        aView?.backgroundColor = UIColor(white: 0, alpha: 0.5)

        let ai = UIActivityIndicatorView(style: .large)
        ai.center = aView!.center
        ai.color = .red
        ai.startAnimating()
        aView?.addSubview(ai)
        self.view.addSubview(aView!)

        Timer.scheduledTimer(withTimeInterval: 20, repeats: false, block: {_ in self.removeSpinner()})
    }

    func removeSpinner(){

        aView?.removeFromSuperview()
        aView = nil
    }
}

代码已执行(我检查了),但没有旋转器或背景较暗的视图的迹象。

即使在我定义中

var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()

并放入

activityIndicator.startAnimating()
performSegue...
activityIndicator.stopAnimating()

没有任何反应。视图层次结构中没有新元素(预期:带有活动指示器的视图,或者只有活动指示器)。怎么了?

更新:

如果我用]称呼>

func tableView(_ tableView: UITableView, willSelectRowAt indexPath: IndexPath) -> IndexPath? {
        self.showSpinner()  //show indicator
        return indexPath

所有代码(willSelect,DidSelect和Segue)都将执行,然后只有1/10秒钟,我才能看到微调器,同时过渡到下一个视图。但是,我需要在显示DidSelect的进一步代码之前先显示微调框]

我已经检查了其他问题/答案,但没有一个对我有用。我有许多视图控制器在准备任务期间从数据库加载数据。因此,我把...

swift uiactivityindicatorview activity-indicator
1个回答
0
投票

感谢Bear Cahill的加油!这是解决方案:

问题是,有人告诉他们要向纺纱厂展示并进行定型。它在函数结束之前不这样做。函数结束后不会同时执行这两个操作,直到执行segue为止微调节目。您知道回去时显示b / c的地方。因此,您需要致电show spinner并允许控件返回到运行循环(让函数完成),然后调用执行segue以加载数据等。我建议您使用计时器:因此您可以致电showSpinner,然后启动一个计时器,并在计时器主体中调用执行segue。这样功能将结束,微调器将显示然后执行segue将被调用。只需将计时器设置为如0.01秒。

© www.soinside.com 2019 - 2024. All rights reserved.