使UITableViewIndexSearch跳转到tableHeaderView而不是0

时间:2014-10-01 19:56:53

标签: ios uitableview

我将我的表格视图的搜索栏设为tableHeaderView(主要是因为即使在调用reloadData时它也会保持键盘焦点。)

我还有我的右边缘字母索引列表,其中有惊人的UITableViewIndexSearch表示放大镜图标。但是sectionForSectionIndexTitle:atIndex:只允许将其映射到分段索引0,该分段索引会自动滚动到表格视图的第一部分(但我的搜索字段隐藏在其上方)。每当点击索引的放大镜图标时,显示整个tableHeaderView的最优雅方式是什么?

2 个答案:

答案 0 :(得分:3)

从Matt Neuberg的书"编程iOS 7",我发现这个相当有用的技巧:

当用户点击放大镜(索引0)时,它会将标题滚动到视图中,我们将返回一个假的部分编号。

夫特:

func tableView(tableView: UITableView, 
       sectionForSectionIndexTitle title: String,
                           atIndex index: Int) -> Int {
    if(index == 0){
        tableView.scrollRectToVisible((tableView.tableHeaderView?.frame)!, animated: false)
    }
    return index-1
}

目标-C:

- (NSInteger)tableView:(UITableView *) 
       sectionForSectionIndexTitle:(NSString *)title
                           atIndex:(NSInteger)index {
    if(index == 0)
        [tableView scrollRectToVisible:tableView.tableHeaderView.frame animated: NO];

    return index-1;
}

答案 1 :(得分:0)

显然,我可以通过在从tableView.contentOffset = CGPointZero返回零之前调度一个非常轻微(0.01秒)的延迟sectionForSectionIndexTitle:atIndex:来实现这一点。这很可疑,但它确实有效。