iOS搜索栏取代

时间:2014-04-04 09:12:03

标签: ios uitableview ios7 uisearchbar uistoryboard

我正在开发一款iPad(iOS7)应用程序,它有以下屏幕。在地图的右上角,我添加了UITableView和搜索栏以及搜索显示。但是当我尝试在搜索栏上输入时,它只是移动到顶部导航栏,如第二个屏幕截图所示。我正在使用故事板来开发这些接口。我想留在tableview中的搜索栏。你能帮我解决一下吗?

1)初始视图 Initial view

2)刚开始在搜索栏上输入 Just after starting to type on the search bar

由于

2 个答案:

答案 0 :(得分:1)

这可能是因为你使用的是UISerchDisplayController,它是实现搜索功能的一种简单方法,但是使用自定义界面很麻烦。
在我看来,你自己管理搜索更好。或者您可以尝试使用UISearchDisplayDelegate,但在iOS7上,我根据应用程序设计尝试更改searchTableView时遇到了很多主要问题。
在前两种方法中,我尝试更改从搜索显示控制器返回的搜索tvc的帧。在iOS7中,这段代码几乎没用,它们在内部改变了一些东西。

#pragma mark -
#pragma mark UISearchDisplayController Delegate Methods

- (void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller{

    NSLog(@"Old frame %@",NSStringFromCGRect(oldTableViewFrame));
    [UIView beginAnimations:@"" context:NULL];
    [UIView setAnimationDuration:1.5];
    self.receiptsTableView.frame= self.view.bounds;
    [UIView commitAnimations];

}
- (void)searchDisplayControllerWillEndSearch:(UISearchDisplayController *)controller{
    [UIView beginAnimations:@"" context:NULL];
    [UIView setAnimationDuration:1.5];
    self.receiptsTableView.frame= CGRectMake(self.view.bounds.origin.x, self.view.bounds.origin.x+self.imageContentView.bounds.size.height, self.view.bounds.size.width,  self.view.bounds.size.height-self.imageContentView.bounds.size.height);
    [UIView commitAnimations];
}


- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{
    [self filterContentForSearchText:searchString scope: (NSString*)scopes[[self.searchDisplayController.searchBar selectedScopeButtonIndex]]];

    // Return YES to cause the search result table view to be reloaded.
    return YES;
}


- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchScope:(NSInteger)searchOption
{
    [self filterContentForSearchText:[self.searchDisplayController.searchBar text] scope:scopes[searchOption]];

    // Return YES to cause the search result table view to be reloaded.
    return YES;
}

答案 1 :(得分:1)

关键是当你触摸UISearchBar时,它的默认行为开始了(向左移动,添加取消按钮......)

所以你必须覆盖它。

这不是一个完美的解决方案,但你可以使用UISearchBarDelegate并实现这些方法:

searchBarShouldBeginEditing:searchBarDidBeginEditing:(我不确定,你必须同时尝试)

UISearchDisplayDelegate

– searchDisplayControllerWillBeginSearch:
– searchDisplayControllerDidBeginSearch:

– searchDisplayControllerWillEndSearch:
– searchDisplayControllerDidEndSearch:

当用户开始和结束搜索时,将其框架设置到您想要的位置。