gpt4 book ai didi

ios - removeFromSuperview() 不起作用

转载 作者:行者123 更新时间:2023-11-28 21:06:01 27 4
gpt4 key购买 nike

我有以下类来添加和删除事件指示器 View :

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 被调用,但它没有从 View 中删除。

我也在 View 中调用函数,结果相同:showActivityIndi​​cator 正常工作,hideActivityIndi​​cator 不工作。

我使用以下参数调用 View 中的函数:

  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)

关于ios - removeFromSuperview() 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45660752/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com