优化了一下代码,记录一下。
时时搜索最主要依赖的是搜索框下面这个协议。
-(BOOL)searchBar:(UISearchBar*)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString*)text;
很多人会把这个协议方法当成搜索框内容发生变化的时候就会走这个方法,其实不然。
这个方法是当搜索框内容即将要变化的时候就会走这个方法。即将变化再走这个方法会出现一个问题就是:
比如用户在搜索框里面输入1。其实这个1还没有出现的时候,这个协议方法已经走了,当你在这个协议方法里面判断里面有没有内容时就会出错。又比如说现在搜索框里面有1这个数字,然后我这个时候,要将1这个数字给去除掉。如果是直接在协议里面的毫无疑问是要出错的。因为这个协议方法是当内容即将发生变化的时候,就已经走了实际上走的时候,根本内容就还没有变化。
那么如何解决这个方法呢?
算了,写到快吃中饭了我还是不啰嗦了,直接说怎么做就好了。
首先 我这边会给几个属性初始化值,这几个值分别是什么呢?
1.搜索内容
2.搜索结果存放数组,搜索结果和全部数据数组一定得区分。
准备工作做好了,那么我们现在开始了。
直接在这个搜索框内容即将变化的协议方法里面,做一个延迟1秒或者1.5秒去调用一个方法。
这个方法里面我们这边需要做哪些操作呢?
1.记录搜索内容。因为已经延迟时间了,所以这个时候可以直接判断这个内容。
2.我们需要判断 搜索内容是否 大于0;
如果搜索内容大于0 处于搜索模式
将内容拿去调用后台接口,然后解析成模型。丢在存放搜索数据的数组里面,最后刷新视图。(同下面下拉刷新一样 上面简单说 下面细说)展示搜索结果数组里面的内容。
如果搜索内容长度为0时。处于普通展示数据,则调用这个页面接口,然后刷新视图展示全部数据数组里面的内容。��
接着我们我们看下拉刷新调用的方法:
如果每次下拉时 判断 搜索框里面有没有值。是否处于搜索模式。
如果有则调接口时多添加这个搜索内容参数。
如果没有值,则不做任何操作。只含基础参数。
接下来调用数据接口 然后解析成数据模型后
如果数据模型个数等于0 展示没数据图。
如果数据模型个数不等于0
接下来判断 搜索框是否有值
如果有值 搜索结果数组等于模型里面的items (相当于把数据模型放在搜索结果数组里面) 然后刷新视图 然后视图展示搜索结果数组内容。
如果没值 则是全部数据数组等于模型里面的items(相当于把数据模型放在全部数据数组里) 然后刷新视图 然后把视图展示全部数据数组里面内容。
上拉加载 同上
只是不同的是将解析成功的数据模型 加在上次搜素结果数组的后面。
网友评论