如何在tableView加载时显示活动指示器?

Ork*_*ade 32 uitableview uiactivityindicatorview ios swift

当我在我的标签之间切换它加载几秒钟,我想知道我的数据正在加载.为此,我决定添加一个活动指标.

我写了一个小函数:

func showActivityIndicator() {
    dispatch_async(dispatch_get_main_queue()) {
        self.spinner = UIActivityIndicatorView(activityIndicatorStyle: .WhiteLarge)
        self.spinner.frame = CGRect(x: 0.0, y: 0.0, width: 80.0, height: 80.0)
        self.spinner.center = CGPoint(x:self.loadingView.bounds.size.width / 2, y:self.loadingView.bounds.size.height / 2)

        self.loadingView.addSubview(self.spinner)
        self.view.addSubview(self.loadingView)
        self.spinner.startAnimating()
    }
}
Run Code Online (Sandbox Code Playgroud)

这将显示我的指标.当我从infoController中点击按钮时尝试使用它:

@IBAction func goToMainFromInfo(sender: AnyObject) {
        self.showActivityIndicator()
        self.performSegueWithIdentifier("fromMainToInfoWActivity", sender: nil)
        self.hideActivityIndicator()
    }
}
Run Code Online (Sandbox Code Playgroud)

我在segue执行之前展示并隐藏在之后.它对我没有帮助.当我尝试使用同步时:

@IBAction func goToMainFromInfo(sender: AnyObject) {
    dispatch_async(dispatch_get_main_queue()) {
        self.showActivityIndicator()
        self.performSegueWithIdentifier("fromMainToInfoWActivity", sender: nil)
        self.hideActivityIndicator()
    }
}
Run Code Online (Sandbox Code Playgroud)

但它也没有帮助.当我按Tab键时,不透明度变为0.5,我在加载时等待.但我没有看到我的活动指标.

问题是什么?

Lyd*_*dia 52

试试这个:

var indicator = UIActivityIndicatorView()

func activityIndicator() {
    indicator = UIActivityIndicatorView(frame: CGRectMake(0, 0, 40, 40))
    indicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray
    indicator.center = self.view.center
    self.view.addSubview(indicator)    
}
Run Code Online (Sandbox Code Playgroud)

你想在哪里开始制作动画

indicator.startAnimating()
indicator.backgroundColor = UIColor.whiteColor()
Run Code Online (Sandbox Code Playgroud)

停止:

indicator.stopAnimating()
indicator.hidesWhenStopped = true
Run Code Online (Sandbox Code Playgroud)

注意:避免同时调用start和stop.只是给出一些条件.


小智 18

Swift 3.0

// UIView扩展

fileprivate var ActivityIndicatorViewAssociativeKey = "ActivityIndicatorViewAssociativeKey"
public extension UIView {
   var activityIndicatorView: UIActivityIndicatorView {
        get {
            if let activityIndicatorView = getAssociatedObject(&ActivityIndicatorViewAssociativeKey) as? UIActivityIndicatorView {
                return activityIndicatorView
            } else {
                let activityIndicatorView = UIActivityIndicatorView(frame: CGRect(x: 0, y: 0, width: 40, height: 40))
                activityIndicatorView.activityIndicatorViewStyle = .gray
                activityIndicatorView.color = .gray
                activityIndicatorView.center = center
                activityIndicatorView.hidesWhenStopped = true
                addSubview(activityIndicatorView)

                setAssociatedObject(activityIndicatorView, associativeKey: &ActivityIndicatorViewAssociativeKey, policy: .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
                return activityIndicatorView
            }
        }

        set {
            addSubview(newValue)
            setAssociatedObject(newValue, associativeKey:&ActivityIndicatorViewAssociativeKey, policy: .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

// NSObject扩展

public extension NSObject {
    func setAssociatedObject(_ value: AnyObject?, associativeKey: UnsafeRawPointer, policy: objc_AssociationPolicy) {
        if let valueAsAnyObject = value {
            objc_setAssociatedObject(self, associativeKey, valueAsAnyObject, policy)
        }
    }

    func getAssociatedObject(_ associativeKey: UnsafeRawPointer) -> Any? {
        guard let valueAsType = objc_getAssociatedObject(self, associativeKey) else {
            return nil
        }
        return valueAsType
    }
}
Run Code Online (Sandbox Code Playgroud)

开始动画

tableView.activityIndicatorView.startAnimating()

停止动画

tableView.activityIndicatorView.stopAnimating()

你可以在Magic中找到更多代码


Rag*_*gul 14

Swift 2+

    class ViewController: UITableViewController {
        weak var activityIndicatorView: UIActivityIndicatorView!

        override func viewDidLoad() {
            super.viewDidLoad()
            let activityIndicatorView = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.Gray)
            tableView.backgroundView = activityIndicatorView
            self.activityIndicatorView = activityIndicatorView
            activityIndicatorView.startAnimating()

        }
        ...
    }
Run Code Online (Sandbox Code Playgroud)


Isu*_*uru 7

我使用两种扩展方法来添加一个UIActivityIndicatorView作为backgroundViewtableview 的。

extension UITableView {
    func showActivityIndicator() {
        DispatchQueue.main.async {
            let activityView = UIActivityIndicatorView(style: .medium)
            self.backgroundView = activityView
            activityView.startAnimating()
        }
    }

    func hideActivityIndicator() {
        DispatchQueue.main.async {
            self.backgroundView = nil
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以像这样显示/隐藏它。

tableView.showActivityIndicator()
tableView.hideActivityIndicator()
Run Code Online (Sandbox Code Playgroud)