【问题标题】:How to stop the activity indicator in swift after a condition is met?满足条件后如何快速停止活动指示器?
【发布时间】:2016-06-01 07:09:42
【问题描述】:

我已将 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
        }
    }
}

【问题讨论】:

    标签: ios swift uiactivityindicatorview tableviewcell


    【解决方案1】:

    您将activityIN 定义为计算变量。任何时候调用它,都会得到全新的实例。查看activityIN var 作为UIActivityIndicatorView 的便利初始化程序。如果您只需要十秒钟的活动,请像这样编辑您的功能:

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

    【讨论】:

    • 感谢@Shadow Of .
    猜你喜欢
    • 1970-01-01
    • 2016-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多