将过滤器按钮添加到UISearchController

smn*_*mnk 10 uitableview uisearchbar ios swift uisearchcontroller

我想一个"过滤器"或"排序"按钮旁边的添加searchBarUISearchController.我已经尝试添加UIButtonsearchbar进入a UIView并将其设置为my UITableView tableView.tableHeaderView这不起作用,因为tableView.tableHeaderViewget的设置回到了UISearchBar解除控制器的时候.以下是我希望它的外观示例:在此输入图像描述

Ali*_*mir 10

我可以用几行代码创建一个搜索过滤器.我希望它有所帮助.

*我选择了书签按钮来应用过滤器图标; 因为我已经使用取消按钮进行自定义操作.

首先,您必须委托searchBar来处理书签按钮单击操作.然后你应该设置如下属性.如果要提供自定义位置(默认位置是右侧),则需要setPositionAdjustment.

searchController.searchBar.delegate = self
searchController.searchBar.showsBookmarkButton = true
searchController.searchBar.setImage(UIImage(named: "Sort"), for: .bookmark, state: .normal)
// MARK: You may change position of bookmark button.
//searchController.searchBar.setPositionAdjustment(UIOffset(horizontal: 0, vertical: 0), for: .bookmark)
Run Code Online (Sandbox Code Playgroud)

然后,覆盖VC中的searchBarBookmarkButtonClicked函数.您可以在此方法中处理click事件.

func searchBarBookmarkButtonClicked(_ searchBar: UISearchBar) { //showAlert, presentVC or whatever you want here }

此外,如果要在搜索控制器处于活动状态时隐藏书签按钮,则需要在updateSearchResults方法中应用控件.

if searchController.isActive {
    searchController.searchBar.showsBookmarkButton = false
} else {
    searchController.searchBar.showsBookmarkButton = true
}
Run Code Online (Sandbox Code Playgroud)


当searchController不活动时:

虽然searchController未激活


当searchController处于活动状态时:

searchController处于活动状态


小智 6

您可以通过在SearchBar旁边添加自己的按钮来保持简单,而不是自定义UISearchBar并使事情变得复杂.

使用为SearchBar 设置No the Shows取消按钮选项

self.searchBar.showsCancelButton = true
Run Code Online (Sandbox Code Playgroud)

要么

取消选中在StoryBoard中显示 SearchBar的取消按钮选项

在此输入图像描述

在SearchBar旁边添加您自己的按钮,如下所示

在此输入图像描述

然后相应地将IBaction添加到按钮并在其中执行操作.

同样在理想情况下,不建议将此视图放在tableview的Header中.如果它高于tableview,那么Apple也会更好.

在此输入图像描述


Wai*_*ain 0

我会失去搜索控制器,它不提供您真正想要的任何功能,并且您需要提供的附加视图/VC 会增加复杂性/代码重复。

您现有的表视图已经拥有您需要的一切,因为它有数据源。它要么是一个数组,要么是一个 FRC。如果它是一个数组,那么您可以用过滤后的内容替换数组的内容,如果它是一个 FRC,您可以更改谓词。

注意:在数组情况下,有 2 个数组引用,1 个指向包含所有未过滤项目的数组,另一个最初是对同一数组的引用 - 第二个引用用于填充表视图。然后,当您进行过滤时,您将创建一个仅包含过滤后的项目的新数组,并将第二个引用指向该数组。

您无需实现搜索控制器委托方法,而是实现搜索栏委托方法并使用它来触发过滤和重置。

现在您已经摆脱了搜索控制器,您也没有切换表格视图,因此您只有 1 个电视和 1 个标题视图。现在没有理由更改标题视图,一切正常。