以编程方式突出显示UITableView单元格

bee*_*eev 7 uitableview ipad uisplitviewcontroller ios

我有一个iPad应用程序,它使用UISplitViewController(左侧是UITableView,右侧是详细视图).点击它时,我的表格视图会以蓝色突出显示所选单元格.

当我调用以下方法时,单元格被选中但不以蓝色突出显示:

[self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionTop];
Run Code Online (Sandbox Code Playgroud)

我花了很多时间来处理各种委托方法和黑客试图让单元格以编程方式突出显示,就好像它已被挖掘一样.我不能这样做.

我已经设法几乎到达那里:

- (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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

只要我也有这个功能,它就可以正常工作(否则即使在点击另一个单元时它仍保持选中状态):

- (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;
}
Run Code Online (Sandbox Code Playgroud)

我知道这是一个奇怪而复杂的解决方法.我不介意,但它甚至没有完全发挥作用.如果选定的单元格在屏幕上滚动,则会丢失其突出显示,而在屏幕上滚动时,已点击的单元格仍会突出显示.

我对这一点感到非常困惑.我确信这种解决方法甚至不是必需的,有一个更简单的解决方案.

Noi*_*Paw 10

请确保单元格selectionStyleUITableViewCellSelectionStyleBlue并且tableView的allowsSelection设置为YES.

这个方法selectRowAtIndexPath:animated:scrollPosition:适合我.它会突出显示所选单元格.


bee*_*eev 0

我发现使用所有已知的可能性完全无法解决这个问题。最后我通过放弃大量代码并切换到 NSFetchedResultsController 来修复它。NSFetchedResultsController 在我最初编写这个应用程序后不久就被引入了,它极大地简化了将 Core Data 与 UITableViews 一起使用的过程。 https://developer.apple.com/library/IOs/documentation/CoreData/Reference/NSFetchedResultsController_Class/index.html