我有一个使用UISplitViewController的iPad应用程序,左侧为UITableView,右侧为详情视图。当您单击表格视图时,所选单元格将以蓝色突出显示。
但是,在我调用以下方法时,选定的单元格不会突出显示为蓝色:
只要我也拥有这个(否则即使点击其他单元格,它仍然保持选中状态),它就能正常工作:
我知道这是一个奇怪而复杂的解决方法。我不介意,但它甚至不能完全工作。如果所选单元格被滚动到屏幕外,它会失去高亮,而被点击的单元格则在滚动到屏幕外时仍保持高亮。
我对此感到非常困惑。我确信这种解决方法根本不应该必要,必须有一个更简单的解决方案。
但是,在我调用以下方法时,选定的单元格不会突出显示为蓝色:
[self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionTop];
我已经花了数天的时间尝试各种委托方法和技巧,试图在程序中使单元格高亮,就像它被点击一样。但是我无法做到。
我几乎通过以下方法实现了这个目标:
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (shouldHighlightCell)
{
NSIndexPath *indexPathForCellToHighlight = [NSIndexPath indexPathForRow:0 inSection:0];
if ([indexPath isEqual:indexPathForCellToHighlight])
{
cell.selected = YES;
shouldHighlightCell = NO;
}
}
}
只要我也拥有这个(否则即使点击其他单元格,它仍然保持选中状态),它就能正常工作:
- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSIndexPath *ip = [NSIndexPath indexPathForRow:0 inSection:0];
if ([[self.tableView cellForRowAtIndexPath:ip] isSelected])
{
[[self.tableView cellForRowAtIndexPath:ip] setSelected:NO];
}
NSIndexPath *iToTheP = indexPath;
return iToTheP;
}
我知道这是一个奇怪而复杂的解决方法。我不介意,但它甚至不能完全工作。如果所选单元格被滚动到屏幕外,它会失去高亮,而被点击的单元格则在滚动到屏幕外时仍保持高亮。
我对此感到非常困惑。我确信这种解决方法根本不应该必要,必须有一个更简单的解决方案。
UITableViewCell
的setHighlighted:animated:
方法吗?此外,在你所包含的代码中,你没有展示实际上是如何使其高亮的。例如,当你设置shouldHighlightCell
时会发生什么? - lnafziger