UITableView 中的 UISearchBar
Posted
技术标签:
【中文标题】UITableView 中的 UISearchBar【英文标题】:UISearchBar in a UITableView 【发布时间】:2009-11-24 12:04:18 【问题描述】:我正在尝试模仿类似于艺术家 iPod 应用程序的表格视图的行为 - 它是一个分段表格视图,右侧有一个部分索引,顶部有一个搜索栏,但最初在显示视图时隐藏.
我正在使用 sdk 3.1.2 和 IB,因此只需将 UISearchDisplayController
拖入我的 NIB - 它会将所有内容连接起来以进行搜索。问题开始是因为我将UISearchBar
添加到UITableView
的第一部分,因为如果我理解正确,我必须这样做,这样我才能通过直接触摸部分索引中的搜索图标跳转到搜索栏?当表格视图出现时,我看到了搜索栏,但它已经调整了大小,现在我在顶部的部分索引后面有一个白色块。它没有采用 UISearchBar
的环绕颜色,有趣的是,它与 Interface Builder 中显示的颜色不同。
我找到了一个提示,可以在UIView
中添加一个小导航栏和一个UISearchBar
,然后将其添加到表格视图单元格中。这可行,但导航栏背景的颜色是您通常期望的颜色(灰色),而不是上面提到的不同颜色。更有趣的是,如果我点击搜索栏开始搜索,然后点击取消,一切都已修复。搜索栏时整个tableview单元格的背景是一样的吗?
【问题讨论】:
【参考方案1】:回答了我自己的问题,但可能对其他初学者有所帮助:
在视图加载时将搜索栏放在表格视图标题中,将 contentOffset 向下滚动到此搜索栏的高度(通常为 44 像素),但易于动态检查 在带有“search”的部分索引中添加搜索图标 为搜索设置 sectionIndexSection -1 处理部分索引触摸时,使用“特殊”索引值进行搜索“-1”(将 contentOffset 滚动回 (0, 0)更新:使用字符串常量UITableViewIndexSearch
字符串代替未记录的字符串“search” - 即在实现时将其作为数组项之一返回:
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
在UITableViewDataSource.
【讨论】:
最好使用UITableViewIndexSearch
而不是@"search"
对!从早期的 3.0 编码开始就不需要这个了 - 也可以在这里查看:***.com/questions/235120/…
我还添加了这个以防止 search
字符串作为该部分的标题出现:if(section == 0)return nil;
【参考方案2】:
将搜索Controller放在tableView的开头 试试这个:
- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index
if (index==0)
[tableView scrollRectToVisible:CGRectMake(0,0,1,1) animated:NO];
return -1;
...
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
NSMutableArray * retValue =[NSMutableArray arrayWithArray:[YOUR ARRAY]];
[retValue insertObject:UITableViewIndexSearch atIndex:0];
return retValue;
【讨论】:
以上是关于UITableView 中的 UISearchBar的主要内容,如果未能解决你的问题,请参考以下文章
为啥第一次滚动到另一个 UITableView 中的 UICollectionView 中的 UITableView 不加载数据?
水平 UITableView 中的垂直 UITableView
在 UITableView 中的 UINib 中重新加载 UITableView
尝试在用户向 iOS 中的 UITableView 添加行时动态增加 UITableView 的高度