Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在iOS中为UISearchBar设置最近的搜索历史下拉列表_Ios_Objective C_Uitableview_Uisearchbar - Fatal编程技术网

如何在iOS中为UISearchBar设置最近的搜索历史下拉列表

如何在iOS中为UISearchBar设置最近的搜索历史下拉列表,ios,objective-c,uitableview,uisearchbar,Ios,Objective C,Uitableview,Uisearchbar,我想为UISearchbar设置最近的搜索历史下拉列表。我使用UITableView 逻辑: 我是如何实现的,方法是在UISearchBar的正下方设置一个UITableView,然后单击UISearchBar它将弹出。 我最初在viewdidload和 -(BOOL)searchBar应该开始编辑:(UISearchBar*)searchBaram取消隐藏tableview。 我在这方面面临太多问题: 1.当searchbartext为空时,返回按钮不启用。在这种情况下,如果我必须再次取消/隐

我想为
UISearchbar
设置最近的搜索历史下拉列表。我使用
UITableView

逻辑:
我是如何实现的,方法是在
UISearchBar
的正下方设置一个
UITableView
,然后单击
UISearchBar
它将弹出。 我最初在
viewdidload

-(BOOL)searchBar应该开始编辑:(UISearchBar*)searchBar
am取消隐藏tableview。 我在这方面面临太多问题:

1.
searchbartext
为空时,返回按钮不启用。在这种情况下,如果我必须再次取消/隐藏表格视图,我必须依赖于
TapPictures

2.再次单击
searchbartext
不会触发其任何委托。它触发学员单击
searchbartext
的唯一时间是第一次单击它时,然后调用
-(BOOL)searchBar shouldBeginediting:(UISearchBar*)searchBar

你们有没有比这更好的解决方案/方法来实现这一功能?? 我们是否有定制的
UISearchBar
最近历史记录下拉列表??
我在
cocoacontrols
code4app
cocoapods
中搜索了一个自定义的
UISearchBar
最近历史下拉列表,但没有找到任何希望。
请帮我解决这个问题。

根据您最近的澄清,我正在重新编写可能的步骤

  • 保留一个标志/布尔值以监视tableview是否隐藏
  • 在UISearchBar委托方法中,检查serachbar的文本字段的[obj isFirstResponder]方法。 A.如果firstResponder=yes-->显示历史图表视图,反之亦然。完成显示/隐藏后,在UISearchBar的文本字段上调用下面的方法。 *[searchbarobj.textfield辞职FirstResponder]* B如果firstResponder=否--->请不要做任何事情。离开这个方法

  • 对于您的第一期,您可以在
    UISearchBar
    上添加类似的类别,当点击
    UISearchBar

    @implementation UISearchBar (MyAddition)
    
    
    - (void)alwaysEnableSearch {
        // Loop around subviews of UISearchBar
        NSMutableSet *viewsToCheck = [NSMutableSet setWithArray:[self subviews]];
    
        while ([viewsToCheck count] > 0) {
            UIView *searchBarSubview = [viewsToCheck anyObject];
            [viewsToCheck addObjectsFromArray:searchBarSubview.subviews];
            [viewsToCheck removeObject:searchBarSubview];
    
        if ([searchBarSubview conformsToProtocol:@protocol(UITextInputTraits)]) {
            @try {
                // Force return key to be enabled
                [(UITextField *)searchBarSubview setEnablesReturnKeyAutomatically:NO];
            }
            @catch (NSException *iException) {
    
            }
        }
      }
    }
    
    对于第二期,为什么不使用
    shouldChangeTextInRange:
    委托方法,该方法将为每个输入的字符调用

    作为旁注,我们有一个示例代码来实现这一点。这可能对你有帮助


    祝你好运

    我可以向你解释这个场景。假设我单击SearchBartext字段,它将触发代理,但再次单击SearchBartext字段不会触发代理。这就是我的问题。你想在点击搜索栏时显示/隐藏tableview。对吗?没错。我想用键盘上的返回键实现同样的功能,但遗憾的是,当UISearchBar中没有文本输入时,返回键被禁用。谢谢:)对于第二个问题,我想解决的方法是当searchbartextfield为空时,我第二次单击searchbartextfield,我想关闭tableview。这就是为什么我没有使用shouldChangeTextInRange委托方法的原因。我明白了。您是否尝试了
    触摸开始:
    方法?当您触摸搜索栏时应该会调用它,因为它的超类是
    UIResponder
    。而且,我认为这个答案值得一次投票:)!:-)非常感谢。如果您能使用
    触摸开始:
    找到答案,请告诉我。如果不是的话,我很乐意投入时间帮助你。