我正在开发一款iPad(iOS7)应用程序,它有以下屏幕。在地图的右上角,我添加了UITableView和搜索栏以及搜索显示。但是当我尝试在搜索栏上输入时,它只是移动到顶部导航栏,如第二个屏幕截图所示。我正在使用故事板来开发这些接口。我想留在tableview中的搜索栏。你能帮我解决一下吗?
1)初始视图
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:
当用户开始和结束搜索时,将其框架设置到您想要的位置。