UITableView 排序部分
Posted
技术标签:
【中文标题】UITableView 排序部分【英文标题】:UITableView sort section 【发布时间】:2011-07-17 00:04:54 【问题描述】:是否可以按字母顺序对 UITableView 部分进行排序?
我有一个对象数组,在第 0 节中,我在本节的数组中只有一个项目。它可以是我交换的数组中的任何项目。第 1 部分将显示数组中的其余对象。
例如
A B C D
C A B D -- 我希望 C 现在位于第 0 部分,其余部分按字母顺序在第 1 部分中
D A B C -- 我希望 D 现在位于第 0 部分,其余部分按字母顺序在第 1 部分中
我尝试过移动物体,分类然后移动,但没有成功。在我需要将其更改为带有标签的 UIViewController 和此标签下方的 UITableView 以模拟此之前,任何建议都会很棒。
【问题讨论】:
【参考方案1】:您可以使用 sortUsingSelector 按字母顺序对对象数组进行排序(该数组确实需要是 NSMutableArray 类型,而不仅仅是一个 NSArray),并在您的模型类中添加一个返回 NSComparisonSort 值的方法。在这种情况下,MyObject 是您的自定义对象的类。排序是基于一个字母属性完成的,该属性是一个 NSString 但可能是别的东西。
// Just before wherever your Data Source is returned in your MyObject Class
[myArray sortUsingSelector:@selector(compareTo:)];
// Method which does the Comparison, also in your MyObject
- (NSComparisonResult)compareTo:(MyObject *)otherObject
return [self.letter caseInsensitiveCompare:otherObject.letter];
现在要将一个对象放在索引 0 处,您可以执行以下操作。我假设您知道要取出的对象的索引...
MyObject *temp = [[myArray objectAtIndex:index] retain];
[myArray removeObject:temp];
[myArray insertObject:temp atIndex:0];
此准备工作将在调用表视图委托方法之前完成。可能在您的 Table View Init 或 ViewWillLoad/ViewDidLoad
更新:以下是如何使用 SortDescriptor 实现相同的字母排序:
// This is setting up the Sort Descriptor for comparing the two objects based on the property 'letter'
NSSortDescriptor *sorter = [[[NSSortDescriptor alloc] initWithKey:@"letter" ascending:YES] autorelease];
NSArray *sortDescriptors = [NSArray arrayWithObject:sorter];
// This is the sorted array returned based on the property 'letter'
NSArray *sorted = [myArray sortedArrayUsingDescriptors:sortDescriptors];
【讨论】:
我试过这个,但我不能让你的 NSComparisonResult 正确。我需要比较两个对象而不是 self.我尝试使用 NSSortDescriptor 作为替代品,但也没有运气。 我已经更新了我上面的帖子来演示如何使用排序描述符。希望它有所帮助。也许发布一些代码会更清楚 感谢我的排序描述符正常工作,但我没有看到文件夹 1 - test, 12 - test2, 13 - test 3, 4 - test 4 按字母顺序排序,这是正确的。 removeObject 和 insertObject 是关键,我不知道 insert 的行为会做什么,它是否将数组向下推。谢谢以上是关于UITableView 排序部分的主要内容,如果未能解决你的问题,请参考以下文章