UITableViewCell中的UIActivityIndi​​catorView(微调器)无法通过swift中的UITableViewController启动动画

时间:2015-04-07 14:55:52

标签: ios xcode uitableview swift uiactivityindicatorview

我有一个包含UIActivityIndi​​catorView(微调器)的自定义UITableViewCell,我尝试单击该单元格,以便微调器开始动画。所以我尝试在UITableViewController中实现以下:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    let cell = tableView.dequeueReusableCellWithIdentifier("testcase", forIndexPath: indexPath) as TestCaseTableViewCell
    cell.spinner.startAnimating()
    tableView.deselectRowAtIndexPath(indexPath, animated: true)
}

我有实例变量" spinner"在我的TestCaseTableViewCell(自定义单元类)中:

@IBOutlet weak var spinner: UIActivityIndicatorView!

但它没有工作......

我只想点击单元格,并且微调器开始动画,因为我想在此期间做一些事情。虽然事情已经完成,但我可以展示类似于" OK"在单元格中(作为旋转器的相同位置)。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:6)

问题在于如何从表格视图中检索您的单元格:dequeueReusableCellWithIdentifier(identifier: String, forIndexPath indexPath: NSIndexPath)。当您需要显示新单元格时,此方法会向UITableView请求其重用缓存中的单元格,因此只应在表格视图的数据源的tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath)方法中使用。 / p>

要在表格视图中查询屏幕单元格,请使用cellForRowAtIndexPath(indexPath: NSIndexPath)。然后您的代码示例变为:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    if let cell = tableView.cellForRowAtIndexPath(indexPath) as? TestCaseTableViewCell {
        cell.spinner.startAnimating()
    }
    tableView.deselectRowAtIndexPath(indexPath, animated: true)
} 

答案 1 :(得分:2)

另一种简单的方法:

  • 选择您的UIActivityIndi​​catorView并检查" Animating"在属性检查器

enter image description here

  • 检查"隐藏"

enter image description here

  • 现在这样做:

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        let cell = tableView.dequeueReusableCellWithIdentifier("testcase", forIndexPath: indexPath) as TestCaseTableViewCell
    
        cell.spinner.hidden = false    // <== Here
    
        tableView.deselectRowAtIndexPath(indexPath, animated: true)
    }
    

如果需要,不要忘记隐藏未隐藏的UIActivityIndi​​catorView;)