默认情况下,在UITableView上,当您触摸单元格时,它会进入选定模式,并以灰色突出显示。
在我们的应用中,您可以触摸标题,然后转到另一个页面。
我们希望用户在触摸某个部分时获得相同类型的视觉反馈,就像他们触摸某个单元格时一样。也就是说,它通过进入“选定”模式并使背景变暗以指示选择来响应。
触摸UITableView部分时不会发生这种情况。该部分不进入选择模式。它不会变灰。
我们尝试使用一个透明按钮,该按钮跨越带有背景图像的自定义UIView,并启用“逆转高光”,但结果不是非常敏感且很糟糕。
实施此类功能的最佳策略是什么?
答案 0 :(得分:5)
我建议继承UIGestureRecognizer以获取touchDown事件,如本文所述:Touch Down Gesture
然后,您可以将姿势识别器添加到UITableViewHeaderFooterView
中的viewForHeaderInSection
,当它触发时,抓住"所选单元格的索引路径。"由于某种原因,第一部分将为null
,但对于所有其他部分,它将具有正确的indexPath.section
:
CGPoint point = [touchDown locationInView:self.tableView];
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:point];
然后只需更改标题单元格的背景颜色即可。当您点击另一个标题或单元格或其他任何内容时,您可能想要清除标题上的颜色,因此每当您更改其背景时都要按住该单元格:
// declare an instance UITableViewHeaderFooterView earlier
if(header)
[[header contentView] setBackgroundColor:[UIColor lightGrayColor]]; // or whatever your default is
if(indexPath)
{
header = [self.tableView headerViewForSection:indexPath.section];
[[[self.tableView headerViewForSection:indexPath.section] contentView] setBackgroundColor:[UIColor greenColor]]; // or whatever color you want
}
else
{
header = [self.tableView headerViewForSection:0];
[[[self.tableView headerViewForSection:0] contentView] setBackgroundColor:[UIColor greenColor]];
}