使用 sectionForSectionIndexTitle 在 UITableView 中快速滚动
Posted
技术标签:
【中文标题】使用 sectionForSectionIndexTitle 在 UITableView 中快速滚动【英文标题】:Quick scroll in UITableView with sectionForSectionIndexTitle 【发布时间】:2015-11-04 10:08:21 【问题描述】:我想通过点击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
并没有什么不同。
你有吗
-
对这种奇怪的行为有解释吗?或
对如何实现 iOS 9 的快速滚动有什么建议吗?
【问题讨论】:
【参考方案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
【讨论】:
以上是关于使用 sectionForSectionIndexTitle 在 UITableView 中快速滚动的主要内容,如果未能解决你的问题,请参考以下文章
在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?
Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)