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

UIActivityIndicatorView (spinner) in UITableViewCell cannot start animating by UITableViewController in swift

我有一个包含 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)
}

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

@IBOutlet weak var spinner: UIActivityIndicatorView!

但是没有用......

我只想点击单元格,微调器开始动画,因为我想在此期间做一些事情。完成某些操作后,我可以在单元格中显示类似 "OK" 的内容(与微调器的相同位置)。我怎样才能做到这一点?

另一个简单的方法:

  • Select 您的 UIActivityIndi​​catorView 并在 属性检查器
  • 中检查 "Animating"

  • 勾选"hidden"

  • 现在这样做:

    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 ;)

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

要向 table 视图询问 屏幕上 单元格,请使用 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)
}