我使用以下代码重新排序我的TableViewCells:
- (void)moveRowAtIndexPath:(NSIndexPath *)indexPath toIndexPath:(NSIndexPath *)newIndexPath{
[self.ammoTable moveRowAtIndexPath:indexPath toIndexPath:[NSIndexPath indexPathForRow:[self.tableArray count] - 1 inSection:1]];
}
-(IBAction)setEdit{
if ([self.button.currentTitle isEqualToString:@"Edit"]) {
self.ammoTable.editing = YES;
[self.button setTitle:@"Done" forState:UIControlStateNormal];
}
else{
self.ammoTable.editing = NO;
[self.button setTitle:@"Edit" forState:UIControlStateNormal];
}
}
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath
*)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath
{
// fetch the object at the row being moved
NSString *r = [self.tableArray objectAtIndex:fromIndexPath.row];
// remove the original from the data structure
[self.tableArray removeObjectAtIndex:fromIndexPath.row];
// insert the object at the target row
[self.tableArray insertObject:r atIndex:toIndexPath.row];
[self.ammoTable reloadData];
}
除非您离开视图并返回视图,否则一切都很有效。如果我移动细胞,当视图重新出现时,它们都按照它们所处的原始顺序排列。这有什么理由吗?谢谢你的帮助!
答案 0 :(得分:0)
我假设您正在从某种数组中加载数据。除了移动表格中的单元格外,还必须对此数组执行相同的操作。
答案 1 :(得分:0)
您需要保留对tableArray
属性所做的更改,以便在下次显示视图时再次重新加载该数组时,将按新顺序加载行。
答案 2 :(得分:0)
因为您正在使用旧数组重新加载tableview,即不使用更新的数组 这意味着你要重新初始化你的数组,它可能在viewDidLoad中。 创造&在appDelegate中初始化你的数组。使用这个数组&移动单元格时进行更改,它将保持元素的顺序。
的链接答案 3 :(得分:0)
当您在tableview单元格中进行更改时,您还需要在表格中进行相同的更改。否则,tableview单元格将按照数组中的顺序加载。
答案 4 :(得分:0)
@Alex
为什么当我不重新排序单元格时,数组会自动进行 还记得订单吗?但如果我想重新订购我必须手动制作它 还记得国家吗?
你看到Alex,数组不记得任何顺序,它是根据数组排列自己的表。这是数据源的重点。操纵数据源,您可以操作表。但是操纵表不会改变数据源。因此,如果要对表进行一些更改,请记住事先更改dataSource以反映相同的情况。
例如。假设您要从表中删除一行。如果你去 commitEditing 方法只需删除该行,您就会结束 崩溃,无效更新或不一致异常。你需要 首先从中删除相应单元格的数据 dataSource,然后删除该行。
在您的情况下相同..首先交换数据数组中的对象,然后相应地移动行。
希望我很清楚。干杯,玩得开心。