Раздел сортировки UITableView - PullRequest
0 голосов
/ 17 июля 2011

Можно ли отсортировать раздел UITableView по алфавиту?

У меня есть массив объектов, и в разделе 0 у меня есть только один элемент из массива в этом разделе. Это может быть любой элемент в массиве, который я меняю. в разделе 1 будет отображаться остаток объектов в массиве.

, например

A B C D

C A B D - Я хочу, чтобы C теперь находился в секции 0, остальные в алфавитном порядке в секции 1

D A B C - я хочу, чтобы D теперь находился в секции 0, остальные в алфавитном порядке в секции 1

Я пытался перемещать объекты, сортировать и затем перемещать, но безуспешно. Любые предложения были бы хорошими, прежде чем мне нужно изменить его на UIViewController с меткой и UITableView под этой меткой, чтобы имитировать это.

1 Ответ

0 голосов
/ 17 июля 2011

Вы можете отсортировать массив объектов по алфавиту, используя 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 или 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];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...