表视图标题索引

时间:2013-10-15 14:29:30

标签: uitableview indexing alphabetical

我的表格视图全部设置了,我可以使用部分索引跳转到行,因为我按字母顺序排列,但我希望表格视图在设备的联系人列表中有标题。例如:

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

1 个答案:

答案 0 :(得分:0)

您可以使用TLIndexPathDataModel中的TLIndexPathTools轻松完成此操作。您可以使用基于块的初始值设定项根据每个品牌的第一个字母将项目组织成各个部分:

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