UISearchBar 不在 TableViewController 的表视图标题中?

Posted

技术标签:

【中文标题】UISearchBar 不在 TableViewController 的表视图标题中?【英文标题】:UISearchBar not in the TableViewController's table view header? 【发布时间】:2012-12-06 18:26:32 【问题描述】:

我想了解如何将 UISearchBar 添加到 TableViewController - 但不是添加到表视图标题。

我的现有搜索栏在某些情况下滚动后消失时遇到问题。我找到了使搜索栏“浮动”的方法,但在一些极端情况下,搜索栏在滚动后仍然消失。

在谷歌搜索这个问题后,我发现有些人已经将搜索栏从表格视图标题中取出来处理这个问题。如果您的表视图被添加到 UIViewController,这相对容易。但是如何将新视图(在本例中为搜索栏)添加到 TableViewController - 这不是 TableViewController 自动提供的表视图的子视图?

iPad 应用 ios 6

-谢谢 迈克 C.

【问题讨论】:

【参考方案1】:

首先,使用故事板。将 UIView 对象添加到表头。然后,将您的 UISearchBar 放在 UIView 中。此外,您需要将表格视图控制器设置为搜索栏的代表。不要使用 scrollViewDidScroll 方法(或类似方法),而是将浮动代码放入 viewDidLayoutSubviews。这适用于所有情况。我还调用了bringToFront,因为我使用了一个自定义的节标题,并且需要确保表格标题视图始终保持在顶部。最上面的 UIEdgeInset 是 tableHeaderView 的高度。

viewDidLayoutSubviews 
    [super viewDidLayoutSubviews];
    CGRect frame=self.tableView.tableHeaderView.frame;
    frame.origin.y=self.tableView.contentOffset.y;
    if (frame.origin.y <= 0) 
        frame.origin.y=0;
        [self.tableView setContentInset:UIEdgeInsetsMake(0.0, 0.0, 0.0, 0.0)];
     else 
        [self.tableView setContentInset:UIEdgeInsetsMake(48.0, 0.0, 0.0, 0.0)];
    
    [self.tableView.tableHeaderView setFrame:frame];
    [self.tableView bringSubviewToFront:self.tableView.tableHeaderView];

【讨论】:

【参考方案2】:

由于 *** 或 Apple 开发者论坛都没有人回复,我从 Cocoaheads 爱达荷州分公司的 Ron Adams 那里得到了帮助。基本上,我最终将我的 UITableViewController 更改为 UIViewController 并手动添加了 tableview 和搜索栏。有点额外的工作,但效果很好!

【讨论】:

我有同样的问题(我正在使用 UITableViewController )。我将 searchBar 添加为 tableHeaderView ,它没有出现在 ios5 中。我会试试你的建议。但是你能告诉我这两种实现的主要区别是什么吗?

以上是关于UISearchBar 不在 TableViewController 的表视图标题中?的主要内容,如果未能解决你的问题,请参考以下文章

UISearchBar 不在 TableViewController 的表视图标题中?

将 UISearchBar 放在 tableview 上方但不在 tableview 或导航栏中

UISearchbar 占位符错位

第一响应者时 UISearchBar 上的平移手势

UISearchDisplayController 不在 iPad 上显示结果表视图

UISearchBar