Какова лучшая практика для реализации многосекционного TableView - PullRequest
0 голосов
/ 04 февраля 2012

All

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

Table View without Sections

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

В настоящее время данные, которые читает TableView, хранятся как объекты в NSMutableArray согласно этому коду:

//AppDelegate.m
- (void)applicationDidFinishLaunching:(UIApplication *)application
{

 //...

NSMutableArray *wordArray = [[NSMutableArray alloc] init];

//Loop through result set from DB and populate objects
while([rs next]){


       [wordArray addObject:[Word wordWith:[rs stringForColumn:@"word"]
                                 Definition:[rs stringForColumn:@"definition"] 
                               SectionIndex:[rs stringForColumn:@"sectionIndex"]]];



   }
   MainViewController *mainViewController = 
   [[MainViewController alloc] initWithNibName:@"MainView" bundle:nil];

   mainViewController.listContent = wordArray;

   //...

 }

Каждый объект имеет значение индекса раздела ([A-Z0-9]), поэтому я уже знаю, в какой раздел входит каждое слово, я знаю, какими должны быть разделы, и я могу легко получить количество объектов для каждого раздела , Все слова были отсортированы через SQL до заполнения NSMutableArray, так что это уже обработано.

Могу ли я создать несколько разделов с помощью одного NSMutableArray или мне нужно сделать что-то другое?

Спасибо

Ответы [ 2 ]

1 голос
/ 04 февраля 2012

Вы можете хранить свои слова в массивах внутри NSDictionary, хранящих ключи для каждой буквы.

Количество секций вернулось бы

[[dictionary allKeys] count];

Заголовок раздела

NSArray * keys = [dictionary allKeys];
[keys objectAtIndex:sectionIdx]

Количество строк в разделе вернуло бы

NSArray * keys = [dictionary allKeys];
[(NSArray *)[dictionary objectForKey:[keys objectAtIndex:sectionIdx]] count];

Каждое слово будет

NSArray * keys = [dictionary allKeys];
[(NSArray *)[dictionary objectForKey:[keys objectAtIndex:sectionIdx]] objectAtIndex:indexPath.row];
0 голосов
/ 22 мая 2012

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

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

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

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