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 的高度

UIViewController 中的 UITableView

UITableView 中的圆顶角