我想通过点击UITableView
旁边的sectionIndexTitles
来滚动浏览UITableView
。到目前为止,我的解决方案如下:
- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index
{
NSIndexPath *matchingIndexPathForTitle = [self matchingIndexPathForSectionIndexTitle:title];
if (matchingIndexPathForTitle) {
[tableView scrollToRowAtIndexPath:matchingIndexPathForTitle
atScrollPosition:UITableViewScrollPositionTop animated:YES];
}
return 1;
}
但似乎因为iOS9总是滚动到UITableView
的顶部
我可以保证matchingIndexPathForTitle
是正确的(例如第1部分,第22行),也可以保证更改为animated:NO
没有任何区别。
你
答案 0 :(得分:1)
由于sectionForSectionIndexTitle
负责滚动到右侧部分而不是单元格,因此在此方法中返回有效的部分索引号将取消所有自定义滚动事件。
要滚动到单元格,必须阻止滚动到该部分。这可以通过返回无效的部分索引来完成,例如-1
- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index
{
NSIndexPath *matchingIndexPathForTitle = [self matchingIndexPathForSectionIndexTitle:title];
if (matchingIndexPathForTitle) {
[tableView scrollToRowAtIndexPath:matchingIndexPathForTitle
atScrollPosition:UITableViewScrollPositionTop animated:YES];
}
return -1; // this will do the trick and not scroll to any section
}