UITableView排序部分

时间:2011-07-17 00:04:55

标签: ipad sorting

是否可以按字母顺序对UITableView部分进行排序?

我有一个对象数组,在第0节中,我在本节中只有一个来自数组的项目。它可以是我交换的数组中的任何项目。第1部分将显示数组中的其余对象。

e.g。

A B C D

C A B D - 我希望C现在位于第0部分,其余部分按字母顺序排列在第1部分

D A B C - 我希望D现在位于第0部分,其余部分按字母顺序排列在第1部分

我试过移动物体,排序然后移动但没有运气。在我需要将它更改为带有Label的UIViewController和在此标签下面的UITableView来模拟这个之前,任何建议都会很棒。

1 个答案:

答案 0 :(得分:0)

您可以使用sortUsingSelector按字母顺序对对象数组进行排序(数组确需要类型为NSMutableArray而不仅仅是NSArray)并添加一个在Model类中返回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 Delegate Methods之前完成。可能在您的表视图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];