2016-06-01 2 views
1

Я объявил UIActivityIndicatorView как вычисленное свойство в расширении моей модели. У меня есть метод configureCell, где я пытаюсь использовать индикатор активности в качестве поднабора изображения. Здесь я могу позиционировать индикатор при определенных условиях, но позже не могу делать никаких изменений. Например, я не могу остановить индикатор активности, не в состоянии изменить цвет, не в состоянии даже скрыть его.Как остановить индикатор активности в быстром состоянии после выполнения условия?

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. Каждый раз, когда вы его вызываете, вы получаете совершенно новый экземпляр. Посмотрите на activityIN var как в удобном инициализаторе UIActivityIndicatorView. Если вам нужна только активность в течение десяти секунд, редактировать 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 как этого

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 Of. –