我对indexPath
中的TableView
个单元格存在问题。
例如,我填充TableView
,其数据源为5个对象[cell0 cell1 cell2 cell3 cell4 cell5]。对于每个单元格,indexPath
似乎是好的:cell0具有indexPath
0,单元格1具有indexPath
1等。
然后,我单击cell0以便在cell0之后使用方法didSelectRowAtIndexPath
添加一个cell6,所以现在,我的数据源类似于[cell0 cell6 cell1 cell2 cell3 cell4 cell5]和{{1}每个单元格似乎又好了:cell0有indexPath
0,单元格6有indexPath
1,单元格1有indexPath
2等等。
所以,现在,我想删除cell6,并在cell2之后插入一个cell7,以获得以下数组[cell0 cell1 cell2 cell7 cell3 cell4 cell5]。单击cell2时应该执行此操作。因此,要执行此操作,indexPath
会调用2种方法:TableView
和didSelectRowAtIndexPath
。
因此,当我点击cell2时,方法didDeselectRowAtIndexPath
被didDeselectRowAtIndexPath
0调用。这看起来很好,因为之前选择的单元格是cell0。在此方法中,我使用方法indexPath
删除cell6。所以现在我的数据源看起来像下面的数组:[cell0 cell1 cell2 cell3 cell3 cell4 cell5]但是deleteRowsAtIndexPaths
似乎很好:cell0有indexPath
0,cell1有indexPath
等等。
最后,要添加cell7,方法indexPath
将使用didSelectRowAtIndexPath
3而不是2来调用。因此,结果是新单元格未插入到正确的位置... dataSource看起来像[cell0 cell1 cell2 cell3 cell7 cell7 cell4 cell5]而不是[cell0 cell1 cell2 cell7 cell3 cell4 cell4]。
有没有办法强制刷新indexPath
?也许我不使用好的方法?
提前感谢您的帮助!
答案 0 :(得分:0)
很难准确理解你要问的是什么,但你可以用以下内容重新加载特定的indexPath。
[self.tableView reloadRowsAtIndexPaths:indexPatshArray withAnimation:UITableViewAnimationFade];
答案 1 :(得分:0)
你的问题和方法确实让我感到困惑。
我建议不要以这种方式修补和强迫订单。
更新您的数据模型,但在NSArray中插入新数据。 像这样:
NSArray *data = [NSArray arrayWithObjects: @"1", @"2", nil];
当用户选择并进行更改时,在数组中插入元素
[data insertObject:@"3" AtIndex:whatever];
此时你想重新加载你的桌面视图,所以从正确的地方调用
[mytableview reloadData];
同样适用于您的删除操作。更新数据模型并调用reloadData。让tableview绘制基于你的cellForRowAtIndex方法
答案 2 :(得分:0)
感谢您的回复。
首先,我点击一个单元格添加一个新单元格。 IndexPath
为0.(没关系)。
方法didSelectRowAtIndexPath
称为
其次,我点击了一个IndexPath
2。
使用didDeselectRowAtIndexPath
0调用方法IndexPath
(没关系)。
方法didSelectRowAtIndexPath' is called with
IndexPath`之后。
新单元格被添加到错误的IndexPath
。
当我点击IndexPath
时,方法didselectRowAtIndexPath
更改数据源(删除单元格“Test”)。调用方法didSelectRowAtIndexPath
时。 IndexPath
始终为2,但使用新数据源(由方法didselectRowAtIndexPath
更改)IndexPath
应为1,以便在好单元格下添加新单元格。
indexPath不会更新。我必须更新自己吗?还是tableView?
- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
[_dashboardDataSource removeObjectAtIndex:indexPath.row + 1];
[tableView beginUpdates];
NSArray *deleteIndexPaths = [NSArray arrayWithObjects:
[NSIndexPath indexPathForRow:indexPath.row + 1 inSection:indexPath.section],
nil];
[tableView deleteRowsAtIndexPaths:deleteIndexPaths withRowAnimation:UITableViewRowAnimationMiddle];
[tableView endUpdates];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
DetailItemData *itemData = [[DetailItemData alloc] init];
dropItemData.title = @"TEst";
[_dashboardDataSource insertObject:itemData atIndex:indexPath.row + 1];
[tableView beginUpdates];
NSArray *insertIndexPaths = [NSArray arrayWithObjects:
[NSIndexPath indexPathForRow:indexPath.row + 1 inSection:indexPath.section],
nil];
[tableView insertRowsAtIndexPaths:insertIndexPaths withRowAnimation:UITableViewRowAnimationMiddle];
[tableView endUpdates];
}