2016-06-01 76 views
1

我已经宣布一个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 
     } 
    } 
} 

回答

6

您将activityIN定义为计算变量。任何时候当你打电话给你时,你都会得到全新的实例。在UIActivityIndicatorView的方便初始值设定项处查看activityIN 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 
     } 
    } 
} 

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

假设TransactionCell类具有声明

var cellActivityIndicator: UIActivityIndicatorView! 

那么你可以编辑自己的FUNC这样

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 
     } 
    } 
} 
+0

感谢@Shadow中。 –