按文字宽度iOS排序UITableView

时间:2013-05-25 10:45:28

标签: ios objective-c uitableview nsarray xcode4.5

我尝试按特定顺序填充UITableView数组。

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

  • 字母

  • 字符数

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

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

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

有没有办法可以做到这一点?

它在阵列中吗?还是tableCell?还是表本身? 我将所有数据存储在NSMutableArray中。

到目前为止,搜索没有任何结果。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:2)

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

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

对于NSArray:

[arrayOfObjects sortUsingDescriptors:[NSArray arrayWithObject:titleSorter];

答案 1 :(得分:1)

要计算文字的宽度,请使用以下内容:

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

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

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

NSSortDescriptor *titleSorter= [[NSSortDescriptor alloc] initWithKey:@"yourWidthProperty"     
  ascending:YES];  
[arrayOfObjects sortUsingDescriptors:[NSArray arrayWithObject:titleSorter];

答案 2 :(得分:1)

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

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

编辑:以下是排序示例的表格视图控制器源代码的direct link