我有一个UITableView,有时需要你触摸它两次以选择一个单元格。
更多细节:
didSelectRowAtIndexPath
。我有一种感觉,第一次触摸实际上是可以选择UITableViewCells或以某种方式激活表格。
我检查过的事情:
didDeselectRowAtIndexPath
。UIGestureRecognizers
正在使用setCancelsTouchesInView:
。桌子上的其他设置:
self.tableView.scrollEnabled = YES;
self.tableView.showsVerticalScrollIndicator = NO;
self.tableView.bounces = NO;
self.tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
造成这种情况的原因是什么?
奇怪的是,设置self.tableView.bounces = YES;
解决了问题。
如果有人有更好的答案,我仍在调查根本原因。显然,我希望桌子不要弹跳,但如果它需要关键功能则不行。
答案 0 :(得分:8)
可能是你实现了didDeselect而不是didSelect?
答案 1 :(得分:2)
斯威夫特:
一旦细胞被点击,它也会被选中,尝试在点击它时立即取消选择。
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
tableView.deselectRowAtIndexPath(indexPath, animated: false)
}
要检查的其他事项还有delaysContentTouches
和canCancelContentTouches
属性。
答案 2 :(得分:1)
您需要使用beginUpdates()和endUpdates()
来包围更新override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
// get current cell
let cell = tableView.cellForRowAtIndexPath(indexPath) as! YourCustomCell
// change the value
// Update the tableView
tableView.beginUpdates()
tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic)
tableView.endUpdates()
}
答案 3 :(得分:0)
也许您应该尝试禁用delaysContentTouches:
tableView.delaysContentTouches = NO;