-1

我使用以下代码重新排序我的 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];
}

一切都很好,除非您离开视图并返回它。如果我移动单元格,当视图恢复时,它们都按照原来的顺序排列。这有什么原因吗?谢谢您的帮助!

4

5 回答 5

0

我假设您正在从某种数组加载数据。除了移动表格中的单元格之外,您还必须对这个数组执行相同的操作。

于 2013-02-12T04:26:58.830 回答
0

您需要保留对tableArray属性所做的更改,以便在下次显示视图时再次重新加载该数组时,将按新顺序加载行。

于 2013-02-12T04:27:07.837 回答
0

因为您正在使用旧数组重新加载您的表格视图,即不是使用更新的数组,这意味着您正在重新初始化您的数组,它可能在 viewDidLoad 中。在 appDelegate 中创建并初始化您的数组。使用此数组并在您移动单元格时进行更改,它将保持元素的顺序。

请参阅此链接以了解如何从 appDelegate 创建和访问数组

于 2013-02-12T04:29:07.893 回答
0

当您在 tableview 单元格中进行更改时,您还需要在 tablearray 中进行相同的更改。否则 tableview 单元格将按照数组中的顺序加载。

于 2013-02-12T04:29:20.143 回答
0

@亚历克斯

为什么当我不重新排序单元格时,数组会自动记住顺序?但是如果我想重新排序,我必须手动让它记住状态?

你看 Alex,数组不记得任何顺序,它是根据数组自行排列的表格。这就是数据源的重点。操作数据源,就可以操作表了。但是操作表并不会改变数据源。因此,如果您要对表进行一些更改,请记住事先更改数据源以反映相同。

例如。说你想从表中删除一行。如果您使用 commitEditing方法并简单地删除该行,您将最终崩溃,出现无效更新或不一致异常。您需要先从 dataSource 中删除相应单元格的数据,然后再删除该行。

在您的情况下也是如此..首先交换数据数组中的对象,然后相应地移动行。

希望我清楚。干杯,玩得开心。

于 2013-02-12T05:01:11.170 回答