2017-08-13 30 views
-1

我有以下類添加和刪除活動指標視圖:removeFromSuperview()不工作

import Foundation 
import UIKit 

class ViewControllerUtils { 

var container: UIView = UIView() 
var loadingView: UIView = UIView() 
var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView() 

func showActivityIndicator(uiView: UIView) { 
    container.frame = uiView.frame 
    container.center = uiView.center 
    container.backgroundColor = UIColorFromHex(rgbValue: 0xffffff, alpha: 0.3) 

    loadingView.frame = CGRect(x: 0, y: 0, width: 80, height: 80) 
    loadingView.center = uiView.center 
    loadingView.backgroundColor = UIColorFromHex(rgbValue: 0x444444, alpha: 0.7) 
    loadingView.clipsToBounds = true 
    loadingView.layer.cornerRadius = 10 

    activityIndicator.frame = CGRect(x: 0, y: 0, width: 40, height: 40); 
    activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.whiteLarge 
    activityIndicator.center = CGPoint(x: loadingView.frame.size.width/2, y: loadingView.frame.size.height/2); 

    loadingView.addSubview(activityIndicator) 
    container.addSubview(loadingView) 
    uiView.addSubview(container) 
    activityIndicator.startAnimating() 
} 

func hideActivityIndicator(uiView: UIView) { 
    print("hideActivityIndicator called") 

    activityIndicator.stopAnimating() 
    activityIndicator.removeFromSuperview() 
    loadingView.removeFromSuperview() 
    container.removeFromSuperview() 
} 

func UIColorFromHex(rgbValue:UInt32, alpha:Double=1.0)->UIColor { 
    let red = CGFloat((rgbValue & 0xFF0000) >> 16)/256.0 
    let green = CGFloat((rgbValue & 0xFF00) >> 8)/256.0 
    let blue = CGFloat(rgbValue & 0xFF)/256.0 
    return UIColor(red:red, green:green, blue:blue, alpha:CGFloat(alpha)) 
} 

} 

我調用函數中的tableview和觀點以及以下列方式:

override func viewDidLoad() { 
    super.viewDidLoad() 
    ViewControllerUtils().showActivityIndicator(uiView: self.tableView) 

    invitedEvents() 
} 

加載數據後,我嘗試刪除活動指示符,但未刪除。

func invitedEvents() { 
    //calling firebase 
    DataService.ds.REF_USER_CURRENT.observe(.value, with: { (snap) in 
     ViewControllerUtils().hideActivityIndicator(uiView: self.tableView) 
    }) 
} 

當tableview加載時正在打印hideActivityIndi​​cator被調用,但它不會從視圖中刪除。

我在視圖中調用函數以及相同的結果:showActivityIndi​​cator正在工作,hideActivityIndi​​cator不起作用。

我呼籲在視圖中的功能與下列參數:

ViewControllerUtils().showActivityIndicator(uiView: self.view) 
    ViewControllerUtils().hideActivityIndicator(uiView: self.view) 

有誰的想法,我缺少的是什麼?

回答

1

每次編寫ViewControllerUtils()時,都會創建ViewControllerUtils類的新實例,因此一旦使用一個實例顯示活動指示器,就必須獲取相同的活動指示器實例,以將其刪除並添加它。所以你可以把ViewControllerUtils作爲單例類來使用它。

class ViewControllerUtils { 
    static let shared = ViewControllerUtils() 
    private override init() { 
    } 
} 

現在打電話給你的方法,這樣的..

ViewControllerUtils.shared.showActivityIndicator(uiView: self.tableView) 
ViewControllerUtils.shared.hideActivityIndicator(uiView: self.tableView)