UISearchDisplayController: Cancel as dismiss button
我在
1 2 3 4 5 6 | @interface SearchViewController : UIViewController <UISearchBarDelegate, UISearchDisplayDelegate, UITableViewDelegate, UITableViewDataSource> { NSSet *words; UISearchDisplayController *searchController; UISearchBar *searchBar; PhraseTableViewController *phraseTableViewController; } |
为了返回上一个视图,我想使用SearchBar的"取消"按钮。现在出现了问题:如果在未进行搜索的情况下用户触摸了基础表视图的灰色区域,则取消按钮(因此是唯一的取回方法)消失了。
这是我尝试解决的问题:
想法如何解决此问题:
我很高兴收到您的任何意见。预先感谢。
好吧,我想我找到了一种可行的方法:我只是取消隐藏导航栏以显示正确的事件,以便用户获得后退按钮。请参阅下面的相关代码,但是我必须补充一点,某些事件处理是
编辑:是的,我知道它很丑-但是,如果您问我,那该死的UISearchDisplayController也是如此。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | 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]; } |