【问题标题】:How to sort NSArray based on manually sorted UITableView order如何根据手动排序的 UITableView 顺序对 NSArray 进行排序
【发布时间】:2014-02-05 12:21:50
【问题描述】:

我有一个简单的 UITableView 从给定的 NSArray(NSDictionaries)以相反的顺序形成,以便新添加的单元格出现在顶部:

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    cell.textLabel.text = [(NSDictionary*)list[list.count - indexPath.row - 1] objectForKey:@"name"];

    return cell;
}

然后可以由用户手动对表格进行排序:

http://i.stack.imgur.com/kn8BV.png

我的问题是如何对数组进行排序,以便在用户下次启动应用程序时保持表格的新顺序。

【问题讨论】:

  • 您可以尝试在字典中添加索引,这将保留所有添加项目的索引值。现在您可以根据索引排列数组了。
  • 看看像canMoveCellAtIndexPath这样的tableview代表
  • @Ashu,应该作为答案添加(关于在移动过程中维护字典的更多细节)

标签: ios uitableview sorting nsarray


【解决方案1】:

我认为它们是一个 NSdictionary 数组,你正在从这个数组加载表格视图中的数据。现在你可以做的就是在你的字典中再添加一个对象,键是“索引”。 现在您可以按索引的递增或递减顺序排列数组,然后根据需要重新加载表视图。您可以使用以下代码来安排数据:

NSSortDescriptor *lowestToHighest = [NSSortDescriptor sortDescriptorWithKey:@"self" ascending:YES];
[yourAray sortUsingDescriptors:[NSMutableArray arrayWithObject:lowestToHighest]];

【讨论】:

  • 谢谢!我认为这样就可以了。
【解决方案2】:

您应该将字典保存在本地文件(即 JSON)中,并在用户下次启动时从存储的文件中加载它。您可以从此链接获取有关以 JSON 格式保存文件的帮助。 Generate JSON string from NSDictionary

【讨论】:

  • 创建一个数据源对象。从该数据源加载表内容。重新排序表时重新排序数据源数组中的对象。然后将其保存为 JSON。
  • 我在磁盘上存储数据源没有问题。我只是不知道如何根据 tableView 的顺序对其进行排序。
  • 当您在 UITableView 中某个索引 i 处添加新单元格时,将该对象也插入到该索引处的字典中。 [datasourceDict setObject:item forKey:[NSNumber numberWithInt:i]];
猜你喜欢
  • 2010-11-23
  • 1970-01-01
  • 2016-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多