Алфавитный TableView с Three20 - PullRequest
       7

Алфавитный TableView с Three20

1 голос
/ 14 декабря 2011

У меня есть простой TTTableViewController для представления набора компаний.Я хотел бы отсортировать TableView по алфавиту, используя разделы и селектор букв в правой части TableView.

Есть ли простой способ сделать это с помощью Three20?

В настоящее время я неиметь какой-либо отдельный источник данных.

 - (void)createModel {

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

      for(IDCompany* company in companies) {

           [itemsArray addObject:[TTTableSubtitleItem itemWithText:[company title]  subtitle:[company companyDescription]  URL:[company urlToDetailView]]];

      } 

     self.dataSource = [TTListDataSource dataSourceWithItems:itemsArray];
     [itemsArray release];

 }

1 Ответ

4 голосов
/ 17 декабря 2011

для начала вы должны использовать TTSectionedDataSource.Он поддерживает разделы, имея 2 NSMutableArray - один для разделов, представленных массивом строк, а другой массивом массивов с элементами таблицы для каждого раздела.

Получение букв также довольно просто.UITableViewDataSource поддерживает:

- (NSArray*)sectionIndexTitlesForTableView:(UITableView*)tableView;

, а базовый класс в Three20 поддерживает их извлечение, выполняя это:

- (NSArray*)sectionIndexTitlesForTableView:(UITableView*)tableView {
   return [TTTableViewDataSource lettersForSectionsWithSearch:YES summary:NO];
}

Лучшим решением для вас будет созданиеновый DataSource и наследуйте его от TTSectionedDataSource, затем реализуйте что-то подобное для построения разделов: self.items = [NSMutableArray array];self.sections = [NSMutableArray array];

  NSMutableDictionary* groups = [NSMutableDictionary dictionary];
  for (NSString* name in _addressBook.names) {
    NSString* letter = [NSString stringWithFormat:@"%C", [name characterAtIndex:0]];
    NSMutableArray* section = [groups objectForKey:letter];
    if (!section) {
      section = [NSMutableArray array];
      [groups setObject:section forKey:letter];
    }

    TTTableItem* item = [TTTableTextItem itemWithText:name URL:nil];
    [section addObject:item];
  }

  NSArray* letters = [groups.allKeys sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
  for (NSString* letter in letters) {
    NSArray* items = [groups objectForKey:letter];
    [_sections addObject:letter];
    [_items addObject:items];
  }

Полное рабочее решение приведено в примерах TTCatalog под источником Three20, и там вы найдете MockDataSource.m с этим кодом.

...