UITableView 中的 UISearchBar

发布于 2024-08-12 16:22:19 字数 593 浏览 7 评论 0原文

我试图模仿类似于 iPod 应用程序的艺术家表视图的行为 - 它是一个分段表视图,右侧有一个部分索引,顶部有一个搜索栏,但在显示视图时最初是隐藏的。

我使用的是 sdk 3.1.2 和 IB,因此只需将 UISearchDisplayController 拖到我的 NIB 中 - 它会连接所有内容以进行搜索。问题开始是因为我将 UISearchBar 添加到 UITableView 的第一部分,因为如果我理解正确的话,我必须这样做,这样我就可以跳转到搜索栏直接触摸部分索引中的搜索图标?当表格视图出现时,我看到搜索栏,但它已经调整大小,现在顶部的部分索引后面有一个白色块。它不采用 UISearchBar 周围的颜色,有趣的是,它与 Interface Builder 中显示的颜色不同。

我发现了一个提示,可以在 UIView 中添加一个小导航栏和一个 UISearchBar,然后将其添加到表格视图单元格中。这是可行的,但导航栏背景的颜色是您通常期望的颜色(灰色),而不是如上所述的不同颜色。更有趣的是,如果我点击搜索栏开始搜索,然后点击取消,一切都固定了。搜索栏时整个表格视图单元格的背景是相同的吗?

I'm trying to mimic the behaviour of a table view similar to the iPod app for Artists - it's a sectioned table view with a section index on the right, with a search bar at the top, but initially hidden when view shown.

I am using sdk 3.1.2 and IB, so simply dragged a UISearchDisplayController into my NIB - it wires everything up for searching. The problem starts because I'm adding the UISearchBar to the first section of the UITableView, because if I understand correctly I must do this so I can jump to the search bar by touching the search icon in the section index directly? When the table view appears I see the search bar but it has resized and I now have a white block behind the section index at the top. It doesn't take the color of the UISearchBar's surround which interestingly is different to that shown in Interface Builder.

I found a tip to add a small navigation bar and a UISearchBar in a UIView, then add this to the table view cell. This works, but the color of the navigation bar's background is what you'd expect normally (gray), not the different color as noted above. More interesting, if I tap the search bar to start a search, then tap Cancel, all is fixed. The background along the whole tableview cell when the search bar is, is the same?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

孤千羽 2024-08-19 16:22:19

回答了我自己的问题,但可能对其他初学者有帮助:

  • 在视图加载时将搜索栏放在表视图标题中,将 contentOffset 向下滚动此搜索栏的高度(通常为 44 像素),但易于动态检查
  • 添加搜索图标在节索引中使用“{search}”
  • 将sectionIndexSection设置为搜索-1
  • 当处理节索引触摸时,使用“特殊”索引值进行搜索“-1”(将contentOffset滚动回(0, 0)

更新:使用字符串常量UITableViewIndexSearch 字符串代替未记录的字符串“{search}” - 即在以下情况下将其作为数组项之一返回实现:

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView

UITableViewDataSource

Answered my own question, but might be helpful to other beginners:

  • Put the search bar in the table view header when view loads, scroll contentOffset down the height of this search bar (typically 44 pixels), but easy to check dynamically
  • Add a search icon in the section index with "{search}"
  • Make the sectionIndexSection for the search -1
  • When handling section index touches use the 'special' index value for search "-1" (to scroll the contentOffset back to (0, 0)

Update: use the string constant UITableViewIndexSearch string in place of the undocumented string "{search}" - i.e. return it as one of the array items when implementing:

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView

in UITableViewDataSource.

黯然#的苍凉 2024-08-19 16:22:19

将搜索控制器放在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;
 } 

Put the search Controller in the beginning of the tableView
and try this:

- (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;
 } 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文