Ios 字母表视图,带三个20

Ios 字母表视图,带三个20,ios,three20,uitableview,Ios,Three20,Uitableview,我有一个简单的TTTableViewController来代表一组公司。我想使用部分和TableView右侧的字母选择器按字母顺序对TableView进行排序 使用Three20有没有简单的方法 目前我没有任何单独的数据源 - (void)createModel { NSMutableArray* itemsArray = [[NSMutableArray alloc] init]; for(IDCompany* company in companies) {

我有一个简单的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];

 }

对于初学者,应该使用TTSectionedDataSource。它通过2个NSMutableArray来支持节-一个用于由字符串数组表示的节,另一个用于每个节的表项数组

得到这些信也很简单。UITableViewDataSource支持:

-NSArray*sectionIndexTitlesForTableView:UITableView*tableView

three20中的基类支持通过以下方式提取它们:

- (NSArray*)sectionIndexTitlesForTableView:(UITableView*)tableView {
   return [TTTableViewDataSource lettersForSectionsWithSearch:YES summary:NO];
}
对于您来说,最好的解决方案是创建一个新的数据源并从TTSectionedDataSource继承它,然后实现类似这样的功能来构建这些节: self.items=[NSMutableArray]; self.sections=[NSMutableArray]

  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];
  }

有关完整的工作解决方案,请参阅three20 source下的TTCatalog示例,在其中您将找到包含此代码的MockDataSource.m。

对于初学者,您应该使用TTSectionedDataSource。它通过2个NSMutableArray来支持节-一个用于由字符串数组表示的节,另一个用于每个节的表项数组

得到这些信也很简单。UITableViewDataSource支持:

-NSArray*sectionIndexTitlesForTableView:UITableView*tableView

three20中的基类支持通过以下方式提取它们:

- (NSArray*)sectionIndexTitlesForTableView:(UITableView*)tableView {
   return [TTTableViewDataSource lettersForSectionsWithSearch:YES summary:NO];
}
对于您来说,最好的解决方案是创建一个新的数据源并从TTSectionedDataSource继承它,然后实现类似这样的功能来构建这些节: self.items=[NSMutableArray]; self.sections=[NSMutableArray]

  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];
  }
有关完整的工作解决方案,请参考three20源代码下的TTCatalog示例,在其中您将找到包含此代码的MockDataSource.m