我对UISearchDisplayController有这个问题。我想在专用视图中使用它来处理搜索。对于我的控制器类,我使用了搜索栏、搜索控制器和tableviewcontroller的组合。SearchViewController链接到.xib。
@interface SearchViewController : UIViewController <UISearchBarDelegate, UISearchDisplayDelegate, UITableViewDelegate, UITableViewDataSource> {
NSSet *words;
UISearchDisplayController *searchController;
UISearchBar *searchBar;
PhraseTableViewController *phraseTableViewController;
}一旦SearchViewController出现,搜索栏就会成为第一个响应器,因此搜索是活动的。除了之外,一切看起来都很好,只有一个例外:为了回到前面的视图,我想使用SearchBar的cancel按钮。现在出现了一个问题:如果用户在没有进行搜索的情况下触及底层表视图的灰色区域,则取消按钮(因此也是返回的唯一方法)消失。
我想要解决的问题是:
showsCancelButton = YES on searchDisplayControllerDidEndSearch.工作,但结果的UI是丑陋的地狱:取消按钮转换出来,然后重新出现。UITapGestureRecognizer添加到搜索控制器的searchResultTableView中,希望能捕捉到水龙头。不起作用,它还能通过。UISearchBar和重写self.searchController.searchBar setShowsCancelButton: -没有工作。如何解决这个问题:
UISearchDisplayController放在一起。你知道去哪找吗?在iOS 3之前这个控制器根本不存在,对吧?难道没有解决办法仍然有效吗?我很高兴你的任何意见。提前谢谢。
发布于 2012-07-10 13:23:29
好的,我想我找到了一种可行的方法:我只是为正确的事件取消导航栏,这样用户就可以得到一个后退按钮。但是,请参阅下面的相关代码,但是我必须补充一点,一些事件处理是UISearchDisplayController的其他“特殊”行为的解决方案的一部分,这些行为会使导航条在错误的时间重新出现(在跳到一个细节页面之前,这也会导致难看的动画)。
编辑:是的,我知道这很难看--但如果你问我,那该死的UISearchDisplayController也是。
static BOOL _cancelBtnClicked = NO;
static BOOL _phraseClicked = NO;
- (void)searchBarCancelButtonClicked:(UISearchBar *)_searchBar{
if(self.searchController.active){
_cancelBtnClicked = YES;
}else{
[self back];
}
}
- (void)searchDisplayControllerDidEndSearch:(UISearchDisplayController *)controller{
if(_cancelBtnClicked){
_cancelBtnClicked = NO;
[self back];
}
else if (!_phraseClicked) {
[self.navigationController setNavigationBarHidden:NO animated:YES];
}
}
- (void)keyboardWillHide:(NSNotification *)notification {
if (_phraseClicked) {
_phraseClicked = NO;
}
else if(self.isViewLoaded && self.view.window != nil) {
self.navigationController.navigationBar.hidden = YES;
}
}
- (void)hideNavbarAndKeepHidden {
self.navigationController.navigationBar.hidden = YES;
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
}
-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
_phraseClicked = YES;
[self.phraseTableViewController tableView:tableView didSelectRowAtIndexPath:indexPath];
}https://stackoverflow.com/questions/11413389
复制相似问题