0

以我iOS应用,我想在我UINavigationController右侧搜索按钮,并且当用户触摸该按钮时,我的UITableView上述UISearchBar被示出。过的tableView显示时的UISearchBar用户触摸的UIBarButtonItem

我想UISearchBar时隐时现的观点负载,然后再隐藏当用户点击UISearchDisplayController取消按钮。

我到处搜索,找不到示例。帮帮我?

回答

1

有一个很好的示例项目here。其要点是:

1.Hide搜索栏呈现视图前:

-(void)viewWillAppear:(BOOL)animated { 
    [self hideSearchBar];   
} 

-(void)hideSearchBar { 
    CGRect newBounds = self.tableView.bounds; 
    newBounds.origin.y = newBounds.origin.y + self.searchBar.bounds.size.height; 
    self.tableView.bounds = newBounds; 
} 

2.1936为您的搜索按钮的动作目标,显示搜索栏

// make the search bar visible 
// code example from https://github.com/versluis/Table-Seach-2013 to deal with iOS 7 behavior 

-(IBAction)displaySearchBar:(id)sender { 

    [self.tableView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:YES]; 

    NSTimeInterval delay; 
    if (self.tableView.contentOffset.y >1000) delay = 0.4; 
    else delay = 0.1; 
    [self performSelector:@selector(activateSearch) withObject:nil afterDelay:delay]; 

} 

- (void)activateSearch 
{ 
    [self.tableView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:NO]; 
    [self.searchBar becomeFirstResponder]; 

} 

3 。最后,点击取消时隐藏搜索栏

-(void)searchBarCancelButtonClicked:(UISearchBar *)searchBar { 
    [self hideSearchBar]; 
} 
+0

此解决方案不工作非常“顺利”,因为当用户点击CANC l他们留在桌子中间,隐藏取消后隐藏搜索栏。 – adamdehaven

+0

我将hideSearchBar移到了viewWillAppear,这有助于TableView的定位。在我的构建中,它返回到最高位置。我也不能再次隐藏取消后再次使SearchBar保持可见状态。在iOS 7上测试。 –

+0

“displaySearchBar”中定时器的用途是什么? – adamdehaven