Как создать секционное / сгруппированное табличное представление по алфавиту - PullRequest
2 голосов
/ 29 октября 2010

Я создаю приложение, которое анализирует огромный XML-файл и получает данные в виде таблицы. Пользователь может ввести текст в строку поиска для поиска в табличном представлении.

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

Ответы [ 2 ]

6 голосов
/ 29 октября 2010

Вы должны использовать табличное представление, настроенное как индекс раздела
См. Руководство по программированию табличного представления для iOS

Заполнение индексированного списка

[...] Индексированный список - это табличное представление в простом стиле, специально настроенное с помощью трех методов UITableViewDataSource:

  • sectionIndexTitlesForTableView:
  • tableView:titleForHeaderInSection:
  • tableView:sectionForSectionIndexTitle:atIndex:

Первый метод возвращает массив строк для использования в качестве элементов индекса (по порядку), второй метод отображает эти строки индекса в заголовки разделов табличного представления (они не обязательно должны быть одинаковыми) и третий метод возвращает индекс раздела, относящийся к записи, которую пользователь коснулся в индексе.

Данные, которые вы используете для заполнения индексированного списка, должны быть организованы так, чтобы отражать эту модель индексации . В частности, вам нужно построить массив массивов. Каждый внутренний массив соответствует разделу в таблице; Массивы секций сортируются (или сортируются) во внешнем массиве в соответствии с преобладающей схемой упорядочения, которая часто является алфавитной схемой (например, от A до Z). Кроме того, элементы в каждом разделе массива сортируются. Вы можете построить и отсортировать этот массив массивов самостоятельно, но, к счастью, класс UILocalizedIndexedCollation делает задачи построения и сортировки этих структур данных и предоставления данных в табличное представление намного проще. Класс также сортирует элементы в массивах в соответствии с текущей локализацией.

1 голос
/ 29 ноября 2012

Пример проекта можно получить по адресу https://github.com/shreeshgarg/sectiontable

Сначала вы должны отсортировать данные с помощью NSSortDescriptor, а затем создать словарь, ключи которого являются первой буквой данных, каждый ключ должен иметь массив записей, начинающихся с одной буквы.

вы можете сделать это как

-(NSMutableDictionary *)fillingDictionary:(NSMutableArray *)ary
{

// This method has the real magic of this sample
// ary is the unsorted array
// keyArray should be global as you need to access it outside of this function

     keyArray=[[NSMutableArray alloc]init];
    [keyArray removeAllObjects];

    NSMutableDictionary *dic=[[NSMutableDictionary alloc]init];

    // First sort the array

    [ary sortUsingSelector:@selector(compare:)];


    // Get the first character of your string which will be your key

    for(NSString *str in ary)
    {
        char charval=[str characterAtIndex:0];
        NSString *charStr=[NSString stringWithUTF8String:&charval];
        if(![keyArray containsObject:charStr])
        {
            NSMutableArray *charArray=[[NSMutableArray alloc]init];
            [charArray addObject:str];
            [keyArray addObject:charStr];
            [dic setValue:charArray forKey:charStr];
        }
        else
        {
            NSMutableArray *prevArray=(NSMutableArray *)[dic valueForKey:charStr];
            [prevArray addObject:str];
            [dic setValue:prevArray forKey:charStr];

        }

    }
    return dic;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...