我有一个包含UIActivityIndicatorView(微调器)的自定义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"在单元格中(作为旋转器的相同位置)。我怎样才能做到这一点?
答案 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)
另一种简单的方法:
现在这样做:
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)
}
如果需要,不要忘记隐藏未隐藏的UIActivityIndicatorView;)