OStack程序员社区-中国程序员成长平台

标题: ios - 使用 sectionForSectionIndexTitle 在 UITableView 中快速滚动 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-13 11:39
标题: ios - 使用 sectionForSectionIndexTitle 在 UITableView 中快速滚动

我想通过点击 UITableView 侧面的 sectionIndexTitles 来允许滚动浏览我的 UITableView。到目前为止,我的解决方案如下:

- (NSInteger)tableViewUITableView *)tableView sectionForSectionIndexTitleNSString *)title atIndexNSInteger)index
{
    NSIndexPath *matchingIndexPathForTitle = [self matchingIndexPathForSectionIndexTitle:title];
    if (matchingIndexPathForTitle) {
        [tableView scrollToRowAtIndexPath:matchingIndexPathForTitle
                         atScrollPosition:UITableViewScrollPositionTop animated:YES];
    }
    return 1;
}

但似乎从 iOS9 开始它总是滚动到 UITableView

的顶部

我可以保证 matchingIndexPathForTitle 是正确的(例如第 1 节,第 22 行),并且更改为 animated:NO 也没有什么不同。

你有吗

  1. 对这种奇怪的行为有什么解释吗?或
  2. 对如何实现 iOS 9 的快速滚动有什么建议吗?



Best Answer-推荐答案


由于 sectionForSectionIndexTitle 负责滚动到右侧部分,而不是单元格,因此在此方法中返回有效的部分索引号将取消所有自定义滚动事件。

为了滚动到一个单元格,必须阻止滚动到该部分。这可以通过返回无效的节索引来完成,例如-1

- (NSInteger)tableViewUITableView *)tableView sectionForSectionIndexTitleNSString *)title atIndexNSInteger)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
}

关于ios - 使用 sectionForSectionIndexTitle 在 UITableView 中快速滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33518973/






欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) Powered by Discuz! X3.4