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

1 回答 1

0

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

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

您可以通过运行“块”示例项目来查看一个工作示例(尽管它使用了一些额外的 TLIndexPathTools 组件,TLTableViewController并且TLIndexPathController为简单起见)。

于 2013-10-15T18:07:06.540 回答