1

我已将 UISearchDisplayController 集成到控制器的 xib 中。我要实现的基本功能是在表格标题中添加搜索栏,并在导航栏中显示搜索显示的按钮。

我坚持的是:当触摸取消时,我想让搜索栏不可见(保持表格,以便索引 0 显示在顶部,而不是搜索栏),但它仍然可见,我不知道为什么(见第三张图)。触摸取消按钮时如何始终隐藏搜索栏的任何想法(参见图 1)。

我试过的:

  1. 将 tableview contentOffset 设置为 44。最初有效。
  2. 调用 [tableview scrollToRowAtIndexPath:....],这似乎没有做任何事情。
4

5 回答 5

2

尝试这个:

- (void)viewWillAppeared:(BOOL)animated
{
        [self hidesSeachBar];
        [super viewWillAppeared:animated];
}

- (void)hidesSearchBar
{
        CGSize searchSize = self.searchDisplayController.searchBar.bounds.size;
        //not complete
        [self.tableView setContentOffset:CGPointMake(0, searchSize.height)];
}

- (void) searchDisplayControllerDidEndSearch:(UISearchDisplayController *)controller
{
    //Your code

    [self.tableView reloadData];
    [self hidesSearchBar];
}
于 2011-03-30T04:28:04.660 回答
2

如果您已将搜索栏声明为这样的属性

@property(nonatomic, retain)UISearchBar *searchBar;

你可以设置

tableView.tableheader = nil;

并把它放回去

tableView.tableHeader = searchBar;

当你再次需要它时。

于 2013-08-23T09:51:18.440 回答
1

设置内容偏移量是隐藏它的方法,您需要在搜索结束时执行此操作。我正在使用这样的东西:

- (void) searchDisplayControllerWillEndSearch:(UISearchDisplayController*)controller
{
    [self hideSearchBar];
}


- (void) hideSearchBar
{
    self.table.contentOffset = CGPointMake( 0, self.searchBar.frame.size.height );  
}
于 2012-06-29T00:47:02.440 回答
0

要隐藏 UISearchDisplayController 的搜索栏,您必须将其设置为非活动状态。这也将重新显示导航栏

在您的情况下,您必须确保采用 UISearchBarDelegate 协议,然后:

- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar
{
    [self.searchDisplayController setActive:NO animated:YES];
}
于 2012-05-20T14:56:04.113 回答
0

要在取消时隐藏搜索栏,您需要调用UISearchBarDelegate方法:

(void)searchBarCancelButtonClicked:(UISearchBar *)searchBar
{
    if(searchTask)[searchTask cancel];

    [self.searchResults removeAllObjects];
    [self.searchDisplayController.searchResultsTableView reloadData];

   //reload you table here
}

谢谢

于 2015-08-05T07:00:22.797 回答