触摸时在UITableView截面标题上显示选择突出显示

时间:2014-06-02 20:38:55

标签: ios objective-c uitableview

默认情况下,在UITableView上,当您触摸单元格时,它会进入选定模式,并以灰色突出显示。

在我们的应用中,您可以触摸标题,然后转到另一个页面。

我们希望用户在触摸某个部分时获得相同类型的视觉反馈,就像他们触摸某个单元格时一样。也就是说,它通过进入“选定”模式并使背景变暗以指示选择来响应。

触摸UITableView部分时不会发生这种情况。该部分不进入选择模式。它不会变灰。

我们尝试使用一个透明按钮,该按钮跨越带有背景图像的自定义UIView,并启用“逆转高光”,但结果不是非常敏感且很糟糕。

实施此类功能的最佳策略是什么?

1 个答案:

答案 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]];
}