【问题标题】:How to set text in UISearchBar without activating UISearchDisplayController如何在不激活 UISearchDisplayController 的情况下在 UISearchBar 中设置文本
【发布时间】:2011-03-15 18:05:39
【问题描述】:

我在我的应用程序中使用 UISearchDisplayController。当用户在返回的搜索结果中选择一个项目时,我会停用 UISearchDisplayController。停用控制器会清除用户键入的文本。我想把它留在那里。我可以通过在控制器被停用后再次设置来强制文本回到 UISearchBar。

像这样:

NSString* searchText = self.searchDisplayController.searchBar.text;
[self.searchDisplayController setActive:NO animated:YES];
self.searchDisplayController.searchBar.text = searchText;

哪个有效。

但是,如果我不对 deactivate 调用设置动画,我会看到时间问题。打电话 setActive 像这样:

NSString* searchText = self.searchDisplayController.searchBar.text;
[self.searchDisplayController setActive:NO animated:NO];
self.searchDisplayController.searchBar.text = searchText;

使 UISearchDisplayController 再次激活!

有没有一种方法可以设置 UISearchBar 的文本,而无需激活与之关联的 UISearchDisplayController?有什么其他建议可以绕过这种行为吗?

【问题讨论】:

    标签: iphone ios uisearchdisplaycontroller


    【解决方案1】:

    对于其他想知道如何做到这一点的人,我设法通过在我的委托中添加它来使其工作:

    - (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
    {
        if(!controller.isActive){
            controller.searchResultsTableView.hidden = YES;
            return NO;
        }
        controller.searchResultsTableView.hidden = NO;
    
        [....]
    
        return YES;
    }
    

    【讨论】:

      【解决方案2】:

      Aaron 的回答很好用。一种更简单的做事方式,通过编辑您的代码和平:

      NSString* searchText = self.searchDisplayController.searchBar.text;
      [self.searchDisplayController setActive:NO animated:NO];
      self.searchDisplayController.delegate = nil;
      self.searchDisplayController.searchBar.text = searchText;
      self.searchDisplayController.delegate = self; //or any delegate you like!
      

      这样,在设置搜索栏文本时,您的任何委托函数都不会被触发。

      【讨论】:

        【解决方案3】:

        在 Apple 的内部论坛中,有人建议在 UISearchDisplayController 停用时将 searchBar 的占位符文本设置为最后一个搜索文本的解决方法。它出现在框中,但显示为灰色。不理想,但可能可以接受。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-08-09
          • 2020-08-05
          • 2018-08-06
          相关资源
          最近更新 更多