Сортировать массив объектов в табличном представлении - PullRequest
0 голосов
/ 31 августа 2011

Я занимаюсь разработкой приложения для iPad, у него есть таблица с пользовательскими ячейками. Каждая ячейка представляет собой объект, который представляет свойства класса в 3 столбцах. Я хочу отсортировать данные на основе столбцов. Как я могу достичь этого, используя цель c?

Ответы [ 3 ]

2 голосов
/ 31 августа 2011

Вы можете использовать NSSortDescriptor для выполнения этой работы.

Подготовить массив, который нуждается в сортировке

NSArray *objects = [[NSArray alloc] initWithObjects:obj1, obj2, obj3, nil];

Создать массив с NSSortDescriptors, в этом примере я использую 1. Для DescriptorKeyВозьмите свойство из ячейки, на котором вы хотите, чтобы сортировка была основана.

NSArray *descriptor = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"title" ascending:YES]];

Затем создайте экземпляр нового массива и вызовите метод экземпляра sortedArrayUsingDescriptors из NSArray в вашем исходном массиве, возвращая отсортированныймассив с одинаковыми объектами.

NSArray *sortedArray = [objects sortedArrayUsingDescriptors:descriptor];

Надеюсь, это поможет!

1 голос
/ 31 августа 2011

Насколько я понимаю, в UITableView нет "столбца". Люди помещают хорошо отформатированные подпредставления в TableViewCell, чтобы сделать таблицу похожей на столбцы.

Для сортировки массива вы можете попробовать метод Брайана, описанный выше. После того, как вы получите отсортированный массив, вызовите

  [TheTableView reloadData];
0 голосов
/ 28 января 2016

У меня была похожая ситуация с несколькими NSMutableArrays и множеством пользовательских ячеек. Я должен был отсортировать их по различным столбцам, и я искал по всему и не мог найти решение. Так вот мое:

Из UIB-кнопки на столбце я отправляю два параметра (сортировка по возрастанию и убыванию) и сохраняю все содержимое каждой строки в словаре.

-(void)sortTheArray :(NSString *)sortWith :(BOOL)isAsc
{
sortedArray = [[NSMutableArray alloc]init];
NSDictionary *dict;

for (int i =0; i< orderArr.count; i++) {
    dict = [NSDictionary dictionaryWithObjectsAndKeys:[addressArr objectAtIndex:i], @"names", [zipArr objectAtIndex:i], @"zip", [orderArr objectAtIndex:i], @"orderNo", [cityArr objectAtIndex:i], @"city", nil];

    [sortedArray addObject:dict];
    //   NSLog(@"Sorted Array: %@", [sortedArray objectAtIndex:i]);
}

Теперь, основываясь на том, какой столбец был выбран, я использую дескриптор сортировки для сортировки только что созданного словаря.

NSSortDescriptor *sortDescript = [[NSSortDescriptor alloc]initWithKey:sortWith ascending:isAsc];
NSArray *descriptors = [NSArray arrayWithObject:sortDescript];
NSArray *newSortedArray = [sortedArray sortedArrayUsingDescriptors:descriptors];

Я реинициализирую существующие изменяемые массивы, чтобы они равнялись нулю.

orderArr = [[NSMutableArray alloc]init];
zipArr = [[NSMutableArray alloc]init];
addressArr = [[NSMutableArray alloc]init];
cityArr = [[NSMutableArray alloc]init];

Здесь я начинаю добавлять содержимое отсортированного массива обратно к старым NSMutableArrays и перезагружаю таблицу.

for (int i = 0; i<newSortedArray.count; i++) {
    // NSLog(@"New Sorted Array is : %@", [newSortedArray objectAtIndex:i]);
    orderArr = [newSortedArray valueForKey:@"orderNo"];
    zipArr = [newSortedArray valueForKey:@"zip"];
    addressArr = [newSortedArray valueForKey:@"names"];
    cityArr = [newSortedArray valueForKey:@"city"];

    }
[self.tableObject reloadData];
}

Если вам это нужно, мой UIButton выглядит так:

- (IBAction)sortWithOrderNo:(id)sender;
    {
if (isAscending == YES) {
    [self sortTheArray:@"orderNo":YES];
    isAscending = NO;
    }
else
    {
    [self sortTheArray:@"orderNo":NO];
    isAscending = YES;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...