我将我的表格视图的搜索栏设为tableHeaderView
(主要是因为即使在调用reloadData
时它也会保持键盘焦点。)
我还有我的右边缘字母索引列表,其中有惊人的UITableViewIndexSearch
表示放大镜图标。但是sectionForSectionIndexTitle:atIndex:
只允许将其映射到分段索引0
,该分段索引会自动滚动到表格视图的第一部分(但我的搜索字段隐藏在其上方)。每当点击索引的放大镜图标时,显示整个tableHeaderView
的最优雅方式是什么?
答案 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:
来实现这一点。这很可疑,但它确实有效。