2

我正在尝试以UITableView特定顺序填充一个数组。

到目前为止,我可以通过这些方式更改顺序

  • 按字母顺序

  • 字符数

  • 我可以运行循环来反转数组中的字符串,然后显示它们。

  • 我可以将所有这些向后翻转,颠倒等。

但我似乎无法按字符宽度对它们进行排序。并非所有字体都是等宽字体,我想尝试按每个单元格中的文本占用多少空间对它们进行排序。

有没有办法做到这一点?

它在数组内吗?还是表格单元?还是表本身?我将所有数据存储在NSMutableArray.

到目前为止,搜索一无所获。任何帮助将不胜感激。

4

3 回答 3

2

您可以按任何方式订购 UITableView 的单元格,但在创建表格的数据源时,您必须在显示它们之前执行此操作。如果您使用 NSFetchResultsController,您可以将距离作为排序描述符。如果您使用的是简单的 NS(Mutable)Array,请在使其成为表的源之前对其进行排序。

NSSortDescriptor *titleSorter= [[NSSortDescriptor alloc] initWithKey:@"Your_Key" ascending:YES];

对于 NSArray:

[arrayOfObjects sortUsingDescriptors:[NSArray arrayWithObject:titleSorter];
于 2013-05-25T10:53:26.003 回答
1

要计算文本的宽度,请使用以下命令:

CGSize sizeToFit = [rowText sizeWithFont:[UIFont systemFontOfSize:12.0f] 
  constrainedToSize:CGSizeMake(220.0f, CGFLOAT_MAX) lineBreakMode:UILineBreakModeWordWrap];

. . . 其中 220.0f 是表格单元格的宽度。

正如另一个答案所述,您可以向模型添加大小属性(或关联引用)。然后使用此属性进行排序:

NSSortDescriptor *titleSorter= [[NSSortDescriptor alloc] initWithKey:@"yourWidthProperty"     
  ascending:YES];  
[arrayOfObjects sortUsingDescriptors:[NSArray arrayWithObject:titleSorter];
于 2013-05-25T11:02:25.517 回答
1

如果您想做动画排序,请查看 GitHub 上的TLIndexPathTools库。它可以使用普通数组或NSFetchRequest.

运行“排序”示例项目。我为您按字母顺序或按长度排序的特定问题添加了它。

编辑:这是排序示例的表视图控制器源代码的直接链接。

于 2013-05-25T15:23:43.543 回答