UITableViewCell丢失突出显示的选择

时间:2013-12-07 04:03:38

标签: ios objective-c uitableview

我正在使用[tableview reloadData];重新加载我的UItableView中的数据,但是当我使用它时,我在UItableVewCell上松开了我的亮点。

我想知道恢复此突出显示的最佳方法。

当用户选择他们编辑信息的单元格然后我调用reloadData时,我设置了一个tempIndexPath,然后在cellForRowAtIndexPath内部我使用此代码重新突出显示单元格,但它不起作用。

if ([tempIndexPath isEqual:indexPath]) {
        cell.selected = YES;        
}

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

此代码保留突出显示的选择,并且通过求助/插入/重新定位是安全的,因为它保留了对模型中的基础对象的引用,而不是索引路径。它还会滚动到选择,这在更新的模型导致选择移出当前滚动位置的框架时很有用。

- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    //Save the selected object at this row for maintaining the highlight later in reloadData
    _selectedItem = [_items objectAtIndex:indexPath.row];
}

- (void) reloadData
{
    [_itemsTable reloadData];

    //Reselect and scroll to selection
    int numItems = _items.count;
    for (int i = 0; i < numItems; i++) {
        NSDictionary *dict = [_numItems objectAtIndex:i];
        if (dict == _selectedItem) {
            //This is more reliable than calling the indexPathForSelectedRow on the UITableView,
            //  since the selection is cleared after calling reloadData
            NSIndexPath *selectedIndexPath = [NSIndexPath indexPathForRow:i inSection:0];
            [_itemsTable scrollToRowAtIndexPath:selectedIndexPath atScrollPosition:UITableViewScrollPositionMiddle animated:NO];
            [_itemsTable selectRowAtIndexPath:selectedIndexPath animated:FALSE scrollPosition:UITableViewScrollPositionNone];

            break;
        }
    }
}

答案 1 :(得分:0)

保存选定的行,重新加载表格视图的数据并再次选择该行。

NSIndexPath* selectedIndexPath = [tableView indexPathForSelectedRow];
[tableView reloadData];
[tableView selectRowAtIndexPath:selectedIndexPath animated:NO scrollPosition:UITableViewScrollPositionNone];

您应该知道这很危险,因为如果在所选行之前将新项添加到表视图中,则选择将不是正确的单元格。您应该计算在行之前插入的行数,并相应地调整selectedIndexPath