开始编辑后关闭 UISearchBar 中的范围栏

Posted

技术标签:

【中文标题】开始编辑后关闭 UISearchBar 中的范围栏【英文标题】:Turning off the scope bar in UISearchBar once editing has begun 【发布时间】:2011-07-22 21:18:36 【问题描述】:

我有一个 UISearchBar 及其各自的搜索显示控制器,通过 InterfaceBuilder 在 xib 文件中布局。搜索栏在 Interface Builder 中配置,未选中“显示范围栏”。但是,一旦在搜索栏中开始输入文本并显示“搜索覆盖”,UISearchBar 就会显示为具有 2 个按钮及其默认“标题”的范围栏。

如何确保在 SearchBar 编辑开始时不显示范围栏?

我已经从管理搜索栏的 ViewController 类中尝试了这些:

- (void)viewDidLoad
    
    UISearchBar *searchBar = self.searchDisplayController.searchBar;
    NSLog(@"Scopebar is visible? %@", searchBar.showsScopeBar == YES ? @"YES" : @"NO");
    searchBar.showsScopeBar = NO; // Doesn't seem to have an effect


#pragma mark - UISearchBarDelegate methods
- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar

    [searchBar setShowsScopeBar:NO]; // doesn't seem to work either
    return YES;

Apple 的示例代码 TableSearch 说明了搜索在搜索开始后具有 4 个按钮范围栏。

【问题讨论】:

【参考方案1】:

如果您查看 InterfaceBuilder,您将在“显示范围栏”复选框下方的“范围标题”列表中看到两次“标题”。 InterfaceBuilder 在您选中复选框时添加它们。当您取消选中时,它不会删除它们,但当您单击正在运行的应用程序中的搜索框时,它们仍会出现。在 InterfaceBuilder 中,暂时重新启用“显示范围栏”复选框以允许您选择每个“标题”行并单击“-”按钮将其删除。然后取消选中“显示范围栏”。你不应该再看到它们了。

【讨论】:

杰夫是正确的。从他的评论中我有点不清楚,但是您必须单击“显示范围栏”,删除/添加您想要的任何范围,然后取消单击显示范围栏。出于某种原因,这些默认情况下是不可编辑的。 到目前为止,无需选中/取消选中任何内容,即使未选中“显示范围”,“范围标题”部分似乎也始终显示。

以上是关于开始编辑后关闭 UISearchBar 中的范围栏的主要内容,如果未能解决你的问题,请参考以下文章

如何将图像设置为 UISearchBar 的范围栏项目?

如何在 iOS 8 中使用 UISearchController,其中 UISearchBar 在我的导航栏中并且有范围按钮?

UISearchBar 范围栏在 iOS7 中不可见

带有范围栏的 UITableView 上的 UISearchBar 在其他 UI 项上调整自身大小

“Swift Core Data”如何向 UISearchBar 添加 Scope Bars? [关闭]

UISearchBar 在解雇后正在调整大小