用于内置搜索的子类uitableview



是否有可能(或建议)尝试将UITATIOT VIEW进行子类内置搜索功能?

我想这样做有两个原因:

REUSE :我可以在项目中的多个位置使用不同的数据源。清洁器代码:它将消除我的视图控制器。在子类实施中,所有用于实施搜索的管道都将整齐地启动。

有什么想法是这样做的?

使用 UISearchDisplayController

来自Apple Doc,

搜索显示控制器管理搜索栏的显示和 表显示显示对数据管理的搜索结果的结果 另一个视图控制器。

您用搜索栏和一个初始化搜索显示控制器 查看负责管理原始内容的控制器 搜索。用户开始搜索时,搜索显示控制器 负责将搜索接口叠加在 原始查看控制器的视图并显示搜索结果。这 结果显示在搜索创建的表视图中 显示控制器。除原始视图控制器外, 从逻辑上讲是其他四个角色。这些通常都是由 相同的对象,通常是原始视图控制器本身。

它可以用作,

searchController = [[UISearchDisplayController alloc]
                         initWithSearchBar:searchBar contentsController:self];
searchController.delegate = self;
searchController.searchResultsDataSource = self;
searchController.searchResultsDelegate = self;

UISearchDisplayController本身封装了所有正常搜索功能。如果您愿意,您可以将其子类实现,以实现您计划做的任何事情。您可以在任何班级中使用它。

我想我应该要求澄清:您是否希望用户的搜索简单地滚动到表中的一行,还是希望它过滤行,仅显示匹配的行搜索词?

假设您要它过滤行...

做一个UITableView子类要做到这一点,这是非常复杂的,因为您需要在"用户"数据源和授权的面前将自己的私有UITableViewDataSourceUITableViewDelegate插入。

它可能也可能相当低效率,这取决于您如何获取表视图的数据。如果表视图可以有数千行,并且它们来自(例如)SQLite数据库或核心数据,则数据源可以更有效地搜索匹配行。在表观视图中,您别无选择,只能通过一一迭代,检查每个行以进行比赛。或者,您必须扩展数据源协议,以使表视图将搜索字符串传递到数据源的方法...似乎它违反了将搜索放在表观中的目标。

如果您向我们详细介绍了您的各种表观视图的数据来自何处,我们也许可以为您提供更好的建议。

最新更新