для начала вы должны использовать 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 с этим кодом.