如何在满足条件后在swift中停止活动指示器?

时间:2016-06-01 07:09:43

标签: ios swift uiactivityindicatorview tableviewcell

我已将UIActivityIndi​​catorView声明为模型扩展中的计算属性。我有一个方法configureCell,我试图使用活动指示器作为imageView的子视图。在这里,我能够将指标置于特定条件下,但以后无法对其进行任何更改。例如,我无法停止活动指示器,无法更改颜色,甚至无法隐藏它。

extension TranscationModel: UITableViewDataSource, UITableViewDelegate
{

 var activityIN: UIActivityIndicatorView {
    var act = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.Gray)
    act.color = UIColor.redColor()
    act.hidden = false
    act.startAnimating()
    return act
}

func configureTransactionCell(cell : TransactionCell?, indexPath: NSIndexPath) {
    if transaction.tid == "Something" {
        activityIN.color = UIColor.greenColor() //Even this doesn't work
        activityIN.center = cell.imgTransactionBill.center
        cell.imgTransactionBill.addSubview(activityIN)
        let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(10 * Double(NSEC_PER_SEC)))
        dispatch_after(delayTime, dispatch_get_main_queue()) {
             activityIN.stopAnimating() //Not working
             activityIN.hidden = true   //Not working
        }
    }
}

1 个答案:

答案 0 :(得分:6)

您将activityIN定义为计算变量。每次调用它时,都会得到全新的实例。在activityIN的便利初始值设定项中查看UIActivityIndicatorView var。如果您只需要十秒钟的活动,请按照以下方式编辑您的func:

func configureTransactionCell(cell : TransactionCell?, indexPath: NSIndexPath) {
    if transaction.tid == "Something" {
        let weakActivityIndicator = activityIN
        weakActivityIndicator.color = UIColor.greenColor()
        weakActivityIndicator.center = cell.imgTransactionBill.center
        cell.imgTransactionBill.addSubview(weakActivityIndicator)
        let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(10 * Double(NSEC_PER_SEC)))
        dispatch_after(delayTime, dispatch_get_main_queue()) {
             weakActivityIndicator.stopAnimating()
             weakActivityIndicator.hidden = true
        }
    }
}

但通常你需要继续引用你从这个初始化器得到的实例。在UIActivityIndicatorView类中定义TransactionCell存储的属性。

假设TransactionCell类有声明

var cellActivityIndicator: UIActivityIndicatorView!

然后你可以像这样编辑你的功能

func configureTransactionCell(cell : TransactionCell?, indexPath: NSIndexPath) {
    if transaction.tid == "Something" {
        cell.cellActivityIndicator = activityIN
        cell.cellActivityIndicator.color = UIColor.greenColor()
        cell.cellActivityIndicator.center = cell.imgTransactionBill.center
        cell.imgTransactionBill.addSubview(cell.cellActivityIndicator)
        let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(10 * Double(NSEC_PER_SEC)))
        dispatch_after(delayTime, dispatch_get_main_queue()) {
             cell.cellActivityIndicator.stopAnimating()
             cell.cellActivityIndicator.hidden = true
        }
    }
}