IOS编程教程: storyboard如何往表视图(Table View)添加搜索栏(Search Bar)

本文介绍了如何在iOS应用中使用Storyboard添加搜索栏到UITableView,并实现搜索功能。通过添加Search Display Controller,设置数据源和委托,实现搜索过滤及搜索结果的显示。在实现过程中,需要注意区分原始表视图和搜索结果表视图,以及处理行选择以展示搜索结果详情。
摘要由CSDN通过智能技术生成

一个常见的问题是我如何在UITableView里用一个搜索栏实现数据搜索。 本章节将展示如何往标签栏项目添加一个搜索栏 。 有了搜索栏,程序允许用户通过指定一个搜索词搜索菜谱列表。

嗯,添加一个搜索栏不是很难,但这需要一点额外的工作。 我们将继续从前一教程Xcode项目中开发的程序做基础  。 如果你没有经历过前面的教程,花些时间来看看 

iOS App Search Bar

理解搜索显示控制器(Search Display Controller)

您可以使用搜索显示控制器(例如UISearchDisplayController类)来管理你的应用程序搜索。一个搜索显示控制器包括一个搜索栏和显示搜索结果表视图。

当用户启动一个搜索,搜索显示控制器将在原始视图上添加搜索界面和显示搜索结果界面。 有趣的是,结果显示在搜索显示控制器创建的表视图中。

Search Results Table View vs Table View

搜索结果表视图和表视图

像其他视图控制器一样,您可以以编程方式创建搜索显示控制器或简单地把它添加到您的使用故事版的应用程序。 在本教程中,我们将使用后一种方法。

在故事板添加一个搜索显示控制器

在故事板中、从食谱视图控制器右下方的导航栏拖拽出“搜索栏和搜索显示控制器(Search Bar and Search Display Controller)”。 如果你做得对,你应该有一个类似于如下的样子:

Adding Search Display Controller

添加搜索显示控制器

在继续之前,尝试运行这个应用程序,看看它的样子。在 没有添加任何新的代码之前,您已经有一个搜索栏。 点击搜索栏将把你带到搜索界面。 然而,搜索不会给你正确的搜索结果。

Search Bar in Table View App

搜索栏出现在表视图应用程序但是不工作

我们什么也没做但为什么搜索结果显示所有的食谱吗?

正如前面提到的,搜索结果显示在搜索显示控制器创建的表视图中。 当继续开发 表视图应用程序的时候 之前,我们实现需要通过UITableViewDataSource协议告诉表视图有多少行数据,每一行中的数据是什么。

像UITableView一样,表视图创建的搜索显示控制器也要采用相同的方法。 根据 UISearchDisplayController的官方文档 介绍,下面是可用的委托,能让你控制搜索结果和搜索栏:

搜索结果表视图的数据源(data source)。  
这个对象是负责提供的数据结果表的数据源的。

搜索结果表视图的委托(delegate)。  
这个对象是负责在其他的事情中,响应用户的选择一个项目在结果表。

搜索显示控制器的委托。  
委托符合UISearchDisplayDelegate协议。 当搜索的开始或结束,当搜索界面显示或隐藏时通知我们。 方便的是,它也可以告知是否改变搜索字符串或搜索范围,以便结果表视图可以被重新加载。

搜索栏的委托。  
这个对象是负责对搜索标准的变化进行响应。

通常,原始的视图控制器作为搜索结果的数据来源和委托的源对象。 你不需要手动连接数据源、委托与视图控制器。 当你插入搜索栏到食谱视图控制器的视图中时,和搜索结果数据来源、委托的连接已经自动完成了。 你可以按下“控制”键,点击“搜索显示控制器”,会出现一个弹窗,揭示了连接。

Search Display Controller Connections

搜索显示控制器的连接

两个表视图(即在食谱视图控制器的表视图和搜索结果表视图)共享同一个视图控制器来处理数据的进入。 如果你跳到代码,显示表数据时有两个方法被调用:










10
11
12
13
14
15
16
17
18
-  (NSInteger
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值