UISearchController:用于显示和搜索的单个与单独的表格视图

Posted

技术标签:

【中文标题】UISearchController:用于显示和搜索的单个与单独的表格视图【英文标题】:UISearchController: single vs separate tableview for display and search 【发布时间】:2018-08-03 07:05:44 【问题描述】:

我需要一个用于显示数据列表的表格视图的搜索栏,不确定是否应该使用一个表格视图来显示和搜索,或者分别使用单独的表格视图来显示和搜索。

单表视图:

+ 感觉只需切换数据源即可更轻松地实现 - 如果我想保持显示表视图的滚动位置(搜索后),则需要额外的工作

单独的表视图:

+ 无需额外的工作来保留显示表视图的滚动偏移 - 在显示和搜索模式之间切换的额外工作

我错过了什么重要的事情吗?推荐的方式是什么?

更新:

    我需要将搜索栏固定在顶部,因此它不能是表格视图的tableHeaderView(表格视图滚动时滚动)或部分标题视图,因为我有不同的部分。李>

谢谢!

【问题讨论】:

我会说将它们分开是推荐的方法,然后您就有了独立的视图和每个分开的功能。这应该使以后的维护和更新更容易,也使您的代码更容易遵循。当您将它们组合在一起时, cellForRow(at: 和 didSelectItem(at 函数都需要涉及 if 语句,而将它们分开则更容易阅读 @Scriptable 谢谢,实际上我使用的是视图模型模式,cellForRow 只是向视图模型询问单元格类型,而无需知道它是用于搜索结果还是正常显示,以及视图模型只有一个数据数组 - 可以是完整的数据列表或过滤,取决于显示/搜索,所以这不是一个大问题。但我同意拥有单独的表格视图更整洁。 【参考方案1】:

我使用了单个表格视图并使用只读属性来根据搜索文本过滤项目数组。

我将原始数据存储在 Property X 中,并根据在搜索栏中输入的文本过滤了 Property (readonly) Y 返回的数据并用作表数据源。

使用搜索栏委托方法,您可以在用户在搜索栏中输入文本时过滤表格的内容。

【讨论】:

【参考方案2】:

第一种是实现搜索功能的推荐方式。管理数据源比处理两个不同的表视图更容易。

你可以试试 UISearchController,它为 searchBar 提供了一个 TableView 并且可以有委托方法来处理这种情况。

Here 和 here 是一些很好的教程来做同样的事情。

【讨论】:

以上是关于UISearchController:用于显示和搜索的单个与单独的表格视图的主要内容,如果未能解决你的问题,请参考以下文章

如果没有初始搜索栏,如何呈现 UISearchController?

UISearchController 未显示

UISearchController - 键盘不显示

UISearchController:searchResultsController 不显示

以编程方式显示导航栏的 UISearchController

UISearchController:即使搜索栏为空也显示结果