[分享]IOS开发-简单实现搜索框显示历史记录的本地缓存及搜索历史每次只能获取到一个的解决方案
注:原文:http://www.zhimengzhe.com/IOSkaifa/40433.html
1.首先,我们需要对进行过搜索的textField的输入内容进行一个NSUserDefaults的本地保存,由于我这里是利用的后台接口处理的具体关键字搜索,如果有做本地搜索的需要自行修改一下。那么我们就在搜索了之后(也就是点击了“前往”那个按钮之后,跳转到下一个界面之前)进行保存即可。这样做的目的有两个:a.避免无效搜索占用本地保存的内存,也就是在textFiled中输入了,但是没有进行搜索,或者说节省了因为用户的取消操作而占用的内存 b.执行逻辑:在搜索之后对搜索的内容关键字进行本地保存处理
2.我们需要利用一个全局的NSMutableArray来保存搜索的内容,每一次点击键盘上的“搜索”时,都对这个NSMutableArray进行一次判断:如果其有内容,就将其mutableCopy到我们相应方法中的这个局部的NSMutableArray中,这样,我们之前所保存在这个全局的NSMutableArray中的数据就会添加到这个局部的NSMutableArray中,之后,我们将输入的内容也添加进这个局部的NSMutableArray中,这样就达到了不断向NSMutableArray中添加数据的目的,而不是每一次都只能取得到一个内容
3.在-(void)viewWillAppear:(BOOL)animated中读取历史记录并在tableView中显示
以上便是大致思路,看一遍代码基本上就理解了,还是不明白的欢迎留言
代码实现:
保存和读取历史记录
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
<code>-(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated];// NSString * searchHistory = [MyUtil getObjectForKey:@"searchHistory"];// if (searchHistory) {// [self.historyArray addObject:searchHistory];// [self.tableView reloadData];// } [self readNSUserDefaults];} -(void)textFieldDidBeginEditing:(UITextField *)textField{ DLog(@"开始搜索"); self.tableView.hidden = NO;} -(IBAction)go:(UITextField *)sender { DLog(@"点击go"); if (self.textField.text.length == 0) { [MyUtil showTipText:@"搜索内容不能为空"]; return; }// [MyUtil saveObject:self.textField.text forKey:@"searchHistory"]; [self SearchText:self.textField.text]; GYSearchDetailedViewController * searchDetailed = getViewController(@"searchDetailed", @"FindDoctor"); searchDetailed.searchInfo = self.textField.text; [self.navigationController pushViewController:searchDetailed animated:YES]; } -(void)SearchText:(NSString *)seaTxt{// NSUserDefaults *userDefaultes = [NSUserDefaults standardUserDefaults];// //读取数组NSArray类型的数据// self.historyArray = [userDefaultes arrayForKey:@"searchHistory"]; // NSMutableArray *searTXT = [self.historyArray mutableCopy]; NSMutableArray *searTXT = [[NSMutableArray alloc] init]; if (self.historyArray) { searTXT = [self.historyArray mutableCopy]; } [searTXT addObject:seaTxt]; //将上述数据全部存储到NSUserDefaults中 NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; [userDefaults setObject:searTXT forKey:@"searchHistory"];} -(void)readNSUserDefaults{ NSUserDefaults *userDefaultes = [NSUserDefaults standardUserDefaults]; //读取数组NSArray类型的数据// NSArray *myArray = [userDefaultes arrayForKey:@"searchHistory"];// NSLog(@"myArray======%@",myArray); self.historyArray = [userDefaultes arrayForKey:@"searchHistory"]; [self.tableView reloadData];}</code> |
删除历史记录
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
<code>//cell允许编辑-(BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { return YES;} //删除历史记录-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { if (editingStyle == UITableViewCellEditingStyleDelete) { [self.historyArray removeObjectAtIndex:indexPath.row - 1]; [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; }} //修改编辑按钮文字-(NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath{ return @"删除";}</code> |
[分享]IOS开发-简单实现搜索框显示历史记录的本地缓存及搜索历史每次只能获取到一个的解决方案的更多相关文章
- [转载]iOS开发:获取设备信息
开发iOS平台的应用的时候,可以获取iOS设备的设备信息,包括设备的名称,设备的机型,设备的iOS版本等等.设备信息主要来自 UIDevice 类. UIDevice *currentDevice = ...
- jQuery实现搜索框插件+豆瓣音乐接口实现豆瓣搜索框
jQuery实现搜索框插件 豆瓣音乐接口实现豆瓣搜索框 豆瓣接口有时不稳定,网络请求会报400,不要惊慌.我主要是练习一下jQuery的JSONP和封装插件. <div class=" ...
- Day12-微信小程序实战-交友小程序-优化“附近的人”页面与serach组件的布局和样式以及搜索历史记录和本地缓存*内附代码)
回顾/:我们已经实现了显示附近的人的功能了,可以多个人看到附近的人页面了 但是还是要进行优化有几个问题:1.我们用户选择了其他的自定义头像之后,在首页可以看到头像的变化,但是在附近的人中头像会变成报错 ...
- 【好程序员笔记分享】——iOS开发之使用TextField作为搜索框
-iOS培训,iOS学习-------型技术博客.期待与您交流!------------ iOS开发之使用TextField作为搜索框 今天给大家带来一个新的技巧,比如平时我们要使用代码创建一 ...
- iOS开发简单介绍
概览 终于到了真正接触IOS应用程序的时刻了,之前我们花了很多时间去讨论C语言.ObjC等知识,对于很多朋友而言开发IOS第一天就想直接看到成果,看到可以运行的iOS程序.但是这里我想强调一下,前面的 ...
- 【好程序员笔记分享】——iOS开发之纯代码键盘退出
-iOS培训,iOS学习-------型技术博客.期待与您交流!------------ iOS开发之纯代码键盘退出(非常简单) iOS开发之纯代码键盘退出 前面说到了好几次关于键盘退出的,但 ...
- iOS开发-简单工厂模式
设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性.概念很长,iOS开发中最常 ...
- ios外包公司——技术分享:IOS开发教程
iOS入门培训,适合已经有C/C++/Java/C#基础的人学习. 本大仙主讲,总共4讲(第4讲尚在制作中),这仅仅是iOS开发的入门而已.学完本教程,应该已经足够你自学并开发app了. ...
- iOS开发 简单实现视频音频的边下边播 (转)
1.ios视频音频边缓存边播放,缓存时可以在已下载的部分拖拽进度条. 3.无论是下载到一半退出还是下载完退出,已缓存的数据都存到自己指定的一个路径.如果已下载完,下次播放时可以不再走网络,直接播放 ...
随机推荐
- iOS学习09C语言函数指针
本次主要学习和理解函数指针 1.函数指针 void printValue(int number) { printf("number = %d\n", number); } int ...
- java中的IO操作总结
一.InputStream重用技巧(利用ByteArrayOutputStream) 对同一个InputStream对象进行使用多次. 比如,客户端从服务器获取数据 ,利用HttpURLConnect ...
- Webpack打包进阶
说在前面 由于使用了React直出,页面各项性能指标使人悦目.本篇将深入探讨目前PC部落所采用webpack打包优化策略,以及探讨PC部落并未使用的 webpack Code Splitting 代码 ...
- HDU 4741 Save Labman No.004(计算几何)
题目链接 抄的模版...mark一下. #include <iostream> #include <cstring> #include <cstdio> #incl ...
- Android -- 重设字符并统计原字符以及修改字符的长度以及位置
1. 效果图
- Java_JDK动态代理学习笔记
昨天被问了个问题,问题的大意是这样的:为什么 Proxy.newProxyInstance(ClassLoader loader, Class<?>[] interfaces, Invoc ...
- Linux 下找出超過某些容量的檔案
找目前所在位置下,所有檔案大小超過3M的file,並列出檔名:大小 find . -type f -size +3M -exec ls -alh {} \; | awk '{print$9 " ...
- ICE——1.Printer
一:打印机 1.Slice定义: interface Printer { void printString(string s); }; 我们的Slice定义含有一个接口,叫作Printer.目前,我们 ...
- 1055. The World's Richest (25)
Forbes magazine publishes every year its list of billionaires based on the annual ranking of the wor ...
- Trie字典树 静态内存
静态字典树 看了好久的字典树,挺简单的一个结构,愣是看了这么久才写出来... 专心一点就不会这样了.... 接下来就去刷刷字典树的题吧....... 下面是字典树.... 定义节点 typedef s ...