2016-06-01 74 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中。 –