2013-10-15 98 views
0

我有我的表查看所有設置,我可以使用部分索引跳轉到行,因爲我有他們按字母順序,但我希望表視圖有標題喜歡你的設備的聯繫人列表。例如:表視圖標題索引

A 
Aeroplane 

B 
Bike 
Bus 

C 
Car 

這是我到目前爲止有:

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView { 
return [NSArray arrayWithObjects:@"A", @"B", @"C", @"D", @"E", @"F", @"G", @"H", @"I", @"J", @"K", @"L", @"M", @"N", @"O", @"P", @"Q", @"R", @"S", @"T", @"U", @"V", @"W", @"X", @"Y", @"Z", nil]; 
} 

- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index { 

NSInteger newRow = [self indexForFirstChar:title inArray:self.Make]; 
NSIndexPath *newIndexPath = [NSIndexPath indexPathForRow:newRow inSection:0]; 
[tableView scrollToRowAtIndexPath:newIndexPath atScrollPosition:UITableViewScrollPositionTop animated:NO]; 

return index; 
} 

回答

0

爲此,您可以輕鬆地使用TLIndexPathDataModelTLIndexPathTools。您可以使用基於塊的初始化來組織你的項目到根據每個的第一個字母的部分做:

NSArray *makes = ...; // array of makes 
TLIndexPathDataModel *dataModel = [[TLIndexPathDataModel alloc] initWithItems:makes sectionNameBlock:^NSString *(id item) { 
    // assuming the items are NSStrings 
    return [((NSString *)item) substringToIndex:1]; 
} identifierBlock:nil]; 

那麼你的索引數據源的方法將是這樣的:

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView 
{ 
    return [self.dataModel sectionNames]; 
} 

- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index 
{ 
    return [self.dataModel sectionForSectionName:title]; 
} 

還有你的另一數據源和委託方法也可以通過數據模型API的簡化:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    return self.dataModel.numberOfSections; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return [self.dataModel numberOfRowsInSection:section]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSString *cellId = ...; 
    UITableViewCell *cell = ...; // dequeue cell 
    NSString *make = [self.dataModel itemAtIndexPath:indexPath]; 
    ... // configure cell 
    return cell; 
} 

您可以通過運行"Blocks" sample project看到一個工作示例(雖然它是爲了簡單起見,使用一些額外的TLIndexPathTools組件,TLTableViewControllerTLIndexPathController)。