簡體   English   中英

removeFromSuperview()不起作用

[英]removeFromSuperview() doesn't work

我具有以下用於添加和刪除活動指示器視圖的類:

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和view中調用該函數:

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)

有人知道我所缺少的嗎?

每當您編寫ViewControllerUtils() ,都在創建ViewControllerUtils類的新實例,因此,一旦使用一個實例顯示活動指示器,則必須獲得相同的活動指示器實例才能將其刪除並添加了活動指示器。 因此,您可以將ViewControllerUtils為單例類,然后使用它。

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

現在像這樣調用您的方法..

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM