iOS searchBar最近搜索结果的实现
2015-11-07 12:56
477 查看
实现此功能就需要保存用户的搜索记录, 这样就必须有个本地的小型数据库,我在这里用NSUserDefault来做例子。
首先在页面的初始化方法中初始化一个数组,由于保存本地时候需要json化数组转化为字符串,所以取的时候也就要反json化这个字符串。
最近搜索记录都是展示最近的一条的记录,这样就需要将数组的元素进行倒序排列。
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
if (self = [superinitWithNibName:nibNameOrNilbundle:nibBundleOrNil])
{
//取保存在本地的字符串
_recentString = [[NSUserDefaultsstandardUserDefaults]objectForKey:@"recentArray"];
//倒序数组排列 这里的JSONObject方法是一种封装好的转json字符串为数组的方法(本人用的MJExtension里封装好的)
_recentArray = (NSMutableArray *)[[[NSMutableArrayarrayWithArray:[_recentStringJSONObject]]reverseObjectEnumerator]allObjects];
}
returnself;
}
其次是在searchBar的代理方法进行操作。我这里做了对搜索记录的去重的操作。
这里向数组中添加元素的时候需要将之前倒序的数组再倒序(也就是向正序数组的最后一个位置插入一个元素),这时候要把正序的数组json化为字符串保存到本地。最后将正序的数组再次倒序,显示最近的搜索记录。
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
//搜索去重
self.recentArray = (NSMutableArray
*)[[self.recentArrayreverseObjectEnumerator]allObjects];
if (self.recentArray.count) {
for (int i = 0; i < self.recentArray.count;
i++) {
if (![self.searchBar.textisEqualToString:self.recentArray[i]])
{
[self.recentArrayaddObject:self.searchBar.text];
break;
}
}
}
else {
[self.recentArrayaddObject:self.searchBar.text];
}
[[NSUserDefaultsstandardUserDefaults]setObject:[self.recentArrayJSONString]forKey:@"recentArray"];
[[NSUserDefaultsstandardUserDefaults]synchronize];
self.recentArray = (NSMutableArray
*)[[self.recentArrayreverseObjectEnumerator]allObjects];
[self.recentCollectionViewreloadData];
}
首先在页面的初始化方法中初始化一个数组,由于保存本地时候需要json化数组转化为字符串,所以取的时候也就要反json化这个字符串。
最近搜索记录都是展示最近的一条的记录,这样就需要将数组的元素进行倒序排列。
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
if (self = [superinitWithNibName:nibNameOrNilbundle:nibBundleOrNil])
{
//取保存在本地的字符串
_recentString = [[NSUserDefaultsstandardUserDefaults]objectForKey:@"recentArray"];
//倒序数组排列 这里的JSONObject方法是一种封装好的转json字符串为数组的方法(本人用的MJExtension里封装好的)
_recentArray = (NSMutableArray *)[[[NSMutableArrayarrayWithArray:[_recentStringJSONObject]]reverseObjectEnumerator]allObjects];
}
returnself;
}
其次是在searchBar的代理方法进行操作。我这里做了对搜索记录的去重的操作。
这里向数组中添加元素的时候需要将之前倒序的数组再倒序(也就是向正序数组的最后一个位置插入一个元素),这时候要把正序的数组json化为字符串保存到本地。最后将正序的数组再次倒序,显示最近的搜索记录。
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
//搜索去重
self.recentArray = (NSMutableArray
*)[[self.recentArrayreverseObjectEnumerator]allObjects];
if (self.recentArray.count) {
for (int i = 0; i < self.recentArray.count;
i++) {
if (![self.searchBar.textisEqualToString:self.recentArray[i]])
{
[self.recentArrayaddObject:self.searchBar.text];
break;
}
}
}
else {
[self.recentArrayaddObject:self.searchBar.text];
}
[[NSUserDefaultsstandardUserDefaults]setObject:[self.recentArrayJSONString]forKey:@"recentArray"];
[[NSUserDefaultsstandardUserDefaults]synchronize];
self.recentArray = (NSMutableArray
*)[[self.recentArrayreverseObjectEnumerator]allObjects];
[self.recentCollectionViewreloadData];
}
相关文章推荐
- iOS(2)-内存管理
- iOS最全的常用正则表达式大全
- ios离线文档(DocSet)下载地址汇总
- IOS7 TableView适配
- iOS套接字简析 --> Socket
- iOS: ARC和非ARC下使用Block属性的问题
- iOS开发学习-nonatomic和atomic的区别
- iOS开发-使用Storyboard进行界面跳转及传值
- iOS(1)-我理解的property的修饰符
- iOS 启动基本流程及基础控件
- iOS中傻傻分不清楚的一些定义
- OS X10.11上安装cocoapods
- iOS远程推送
- 关于在storyboard中使用静态cell的注意事项
- iOS之同步锁
- 响应者链条,iOS中touchs事件的处理流程。
- iOS监听键盘事件
- iOS之单例模式
- 蜂窝教育iOS:我的月薪万元的逆袭之路
- iOS 闪光灯