How to show activity indicator while tableView loads?

前端 未结 12 1819
说谎
说谎 2021-01-30 21:44

When I switch between my tabs it loads some seconds and I want to know that my data is loading. For that I decided to add an activity indicator.

I wrote a little functio

12条回答
  •  眼角桃花
    2021-01-30 22:26

    @brocolli's answer for swift 4.0. You have to use objc_ before getting or setting associated objects. According to the documentation, The APIs of getting and setting the associated object in Swift are:

    func objc_getAssociatedObject(object: AnyObject!,
                                     key: UnsafePointer
                                 )  -> AnyObject!
    
    func objc_setAssociatedObject(object: AnyObject!,
                                     key: UnsafePointer,
                                   value: AnyObject!,
                                  policy: objc_AssociationPolicy)
    

    Implementation:

    import UIKit
    
    fileprivate var ActivityIndicatorViewAssociativeKey = "ActivityIndicatorViewAssociativeKey"
    
    extension UIView {
        var activityIndicatorView: UIActivityIndicatorView {
            get {
                if let activityIndicatorView = objc_getAssociatedObject(self, &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)
    
                    objc_setAssociatedObject(self, &ActivityIndicatorViewAssociativeKey, activityIndicatorView, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
                    return activityIndicatorView
                }
            }
    
            set {
                addSubview(newValue)
                objc_setAssociatedObject(self, &ActivityIndicatorViewAssociativeKey, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
            }
    
        }
    }
    

提交回复
热议问题