按文本宽度iOS对UITableView排序

Posted

技术标签:

【中文标题】按文本宽度iOS对UITableView排序【英文标题】:Sort UITableView by text width iOS 【发布时间】:2013-05-25 10:45:27 【问题描述】:

我正在尝试使用特定顺序的数组填充UITableView

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

按字母顺序

字符数

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

我可以将所有这些向后翻转、上下翻转等。

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

有没有办法做到这一点?

它在数组内吗?还是表格单元?还是表本身? 我的所有数据都存储在NSMutableArray 中。

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

【问题讨论】:

【参考方案1】:

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

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

对于 NSArray:

[arrayOfObjects sortUsingDescriptors:[NSArray arrayWithObject:titleSorter];

【讨论】:

【参考方案2】:

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

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];

【讨论】:

【参考方案3】:

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

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

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

【讨论】:

以上是关于按文本宽度iOS对UITableView排序的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 中按字母顺序对 MediaQuery 的 ArtistQuery 数组进行排序

iOS Storyboard约束详解

java对文本数据按行用冒泡法进行排序

按日期条件对 UItableView 部分进行排序

如何使用 NSFetchedResultsController 按字母顺序对 UITableView 进行排序?

在 UITableViewCell ios 中制作动态 UILabel 高度/宽度?