gpt4 book ai didi

ios - UISearchDisplayController:取消为关闭按钮

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:25:04 25 4
gpt4 key购买 nike

我在使用 UISearchDisplayController 时遇到了这个问题。我想在处理搜索的专用 View 中使用它。对于我的 Controller 类,我使用了搜索栏、搜索 Controller 和 tableviewcontroller 的组合。 SearchViewController 链接到 .xib

@interface SearchViewController : UIViewController <UISearchBarDelegate, UISearchDisplayDelegate, UITableViewDelegate, UITableViewDataSource> {
NSSet *words;
UISearchDisplayController *searchController;
UISearchBar *searchBar;
PhraseTableViewController *phraseTableViewController;
}

一旦 SearchViewController 出现,搜索栏就会变成 firstresponder,因此搜索处于事件状态。一切看起来都很好,但一个异常(exception):为了返回到上一个 View ,我想使用 SearchBar 的取消按钮。现在问题来了:如果用户在没有进行搜索时触摸底层 tableview 的灰色区域,则取消按钮(因此是返回的唯一方法)会消失。

这是我试图解决的问题:

  1. showsCancelButton = YESsearchDisplayControllerDidEndSearch 上。有效,但生成的 UI 丑得要命:取消按钮过渡出来然后重新出现。
  2. UITapGestureRecognizer 添加到搜索 Controller 的 searchResultTableView 中,希望能捕捉到点击。不起作用,它仍然通过。
  3. 子类 UISearchBar 并覆盖 self.searchController.searchBar setShowsCancelButton: - 没有用。

如何解决这个问题:

  1. 始终隐藏取消按钮并添加一个自定义按钮。问题:您是否知道如何做到这一点以使 UI 看起来不错?我最关心的是处理所有情况,使搜索文本字段始终很好地保持在按钮的一侧。
  2. UISearchDisplayController 全部抛弃,以获得更灵活的解决方案。你知道去哪里看吗?在 iOS 3 之前,这个 Controller 不存在,对吧?难道没有解决方案仍然有效吗?

我很高兴收到您的任何意见。提前致谢。

最佳答案

好吧,我想我已经找到了一种可行的方法:我只是取消隐藏正确事件类型的导航栏,以便用户获得后退按钮。请参阅下面的相关代码,但是我必须补充一点,一些事件处理是 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];
}

关于ios - UISearchDisplayController:取消为关闭按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11413389/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com