我正在使用[tableview reloadData];
重新加载我的UItableView中的数据,但是当我使用它时,我在UItableVewCell上松开了我的亮点。
我想知道恢复此突出显示的最佳方法。
当用户选择他们编辑信息的单元格然后我调用reloadData时,我设置了一个tempIndexPath,然后在cellForRowAtIndexPath
内部我使用此代码重新突出显示单元格,但它不起作用。
if ([tempIndexPath isEqual:indexPath]) {
cell.selected = YES;
}
任何帮助将不胜感激。
答案 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
。