需求描述:

使用单独的搜索界面, 提供用户进行搜索并留下搜索记录. 搜索记录可以提供用户进行再次搜索, 或者把搜索记录清空.

方案和技术点:

存储方式使用 NSUserDefaults, 把对应的字段存入数组, 并把数组存到本地即可.

代码:

搜索界面UI设置

-(void)setupUI
{ remenView = [[UIView alloc]initWithFrame:CGRectMake(0, kNavHeight, kDeviceWidth, KDeviceHeight - kNavHeight)];
remenView.userInteractionEnabled = YES;
[self.view addSubview:remenView]; NSUserDefaults *userDefaultes = [NSUserDefaults standardUserDefaults];
//读取数组NSArray类型的数据
NSArray *myArray = [[NSArray alloc] initWithArray:[userDefaultes arrayForKey:@"myArray"]];
// NSArray --> NSMutableArray
_searchTextArr = [NSMutableArray array];
_searchTextArr = [myArray mutableCopy];
if (_searchTextArr.count > 0) {
[self searchHistory:_searchTextArr];
}
}

点击导航条搜索, 键盘搜索按钮或者搜索历史的按钮执行的方法.

-(void)searchText: (NSString *)seaTxt
{
// 把键盘隐藏掉
[_searchTextField resignFirstResponder];
// 搜索 进行服务器请求
[ self getData: seaTxt]; NSUserDefaults *userDefaultes = [NSUserDefaults standardUserDefaults];
// 去除字符串两边的空格
NSString *removeBlackStr = [seaTxt stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
//读取数组NSArray类型的数据
NSArray *myArray = [[NSArray alloc] initWithArray:[userDefaultes arrayForKey:@"myArray"]];
_searchTextArr = [myArray mutableCopy]; BOOL isEqualTo1,isEqualTo2;
isEqualTo1 = NO;
isEqualTo2 = NO; if (_searchTextArr.count > 0) {
isEqualTo2 = YES;
//判断搜索内容是否存在,存在的话放到数组第一位,不存在的话添加。
for (NSString * str in myArray) {
if ([removeBlackStr isEqualToString:str]) {
//获取指定对象的索引
NSUInteger index = [myArray indexOfObject:removeBlackStr];
[_searchTextArr removeObjectAtIndex:index];
if (removeBlackStr != nil && ![removeBlackStr isEqualToString:@""]) {
[_searchTextArr insertObject:removeBlackStr atIndex:0];
}
isEqualTo1 = YES;
break;
}
}
} if (!isEqualTo1 || !isEqualTo2) {
if (removeBlackStr != nil && ![removeBlackStr isEqualToString:@""]) {
[_searchTextArr insertObject:removeBlackStr atIndex:0];
}
} if(_searchTextArr.count > 10)
{
[_searchTextArr removeObjectAtIndex:_searchTextArr.count - 1];
}
//将上述数据全部存储到NSUserDefaults中
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:_searchTextArr forKey:@"myArray"];
[[remenView subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];
remenView.backgroundColor = UIColorFromRGB(0xF2F2F2);
[self searchHistory:_searchTextArr];
}

清空搜索历史

- (void)clear: (UIButton *)button {

    [_searchTextArr removeAllObjects];
//将数据全部从NSUserDefaults中移除
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:nil forKey:@"myArray"];
[[remenView subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];
remenView.backgroundColor = UIColorFromRGB(0xF2F2F2);
}

键盘return监听

- (BOOL)textFieldShouldReturn:(UITextField *)textField{

    [self.view endEditing:YES];

    if ([self.searchTextField.text isEqualToString:@""]) { //如果没有输入任何文字, 不做操作

    }else{

        NSLog(@"return搜");
[self searchText:self.searchTextField.text];
} return YES;
}

监听输入框的文字变化

-(void)textfiledChange:(NSNotification *)obj{

    [self changeSet];
} -(void)changeSet
{
if (_searchTextField.text.length > 0) {
[self.searchBtn setTitleColor:UIColorFromRGB(0xFF9600) forState:UIControlStateNormal];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:self.searchBtn];
}else
{
[self.searchBtn setTitleColor:UIColorFromRGB(0xB3B3B3) forState:UIControlStateNormal];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:self.searchBtn];
}
}

demo地址: https://github.com/yemuhong/HZSearchHistory

iOS 搜索记录的更多相关文章

  1. js实现搜索记录列表

    <div class="sy_div28"> <div class="sy_div23"> <span>搜索历史</s ...

  2. elastic search6.2.2 实现用户搜索记录查询(去重、排序)

    elastic search6.2.2 实现搜索记录查询 ,类似新浪微博这种,同样的搜索记录后面时间点的会覆盖前面的(主要思路:关键词去重,然后按时间排序) 先创建索引 //我的搜索 PUT my_s ...

  3. 微信小程序开发之带搜索记录的搜索框

    实现功能:点击搜索框,有搜索记录时以下拉菜单显示,点击下拉子菜单,将数据赋值到搜索框,点击搜索图标搜索,支持清空历史记录,可手动输入和清空查询关键字, UI: wxml: <!--查询历史记录数 ...

  4. Android 淘宝搜索记录分析及千牛数据库名称关联

    一 taobao搜索关键字分析1.导出淘宝数据文件夹.2.搜索search 找到search文件夹.查看里面可疑文件如history_8d4255cc9c9199c6ec3be940936986b9. ...

  5. iOS 搜索条使用详解

    在ios开发中搜索条的使用挺常见的,不过之前一直没用到也没细细研究,最近做外包项目的时候刚好用到,在这里记录一下使用的过程,只要理解了原理,其实还是比较简单的!上传的图片有点大,刚好可以看清楚它的使用 ...

  6. mysqlbinlog快速遍历搜索记录 (转)

    目标,开发人员说有个数据莫名其妙添加了,但是不知道是从哪里添加的,而且应用功能里面不应该添加这样的数据,为了查清楚来源,所 以我就准备去binlog里面找了,但是binlog有好几个月的数,我这样一个 ...

  7. ios项目记录

    1,如何隐藏状态栏 在基类中重载UIViewController.h中的这个方法 - (BOOL)prefersStatusBarHidden { // iOS7后,[[UIApplication s ...

  8. iOS搜索框

    在iOS8以前搜索框是作为一个控件添加到TableViewController中, 有系统自带的搜索变量self.searchDisplayController 遵守一个搜索显示的协议<UISe ...

  9. 使用localStorage保存搜索记录

    //过滤一个结果的空记录添加,过滤空搜索 默认保存10条记录,自己可修改 function setHistoryItems(keyword) { keyword = keyword.replace(& ...

随机推荐

  1. [笔试题目]使用Stringbuffer无 参的构造函数创建 一个对象时,默认的初始容量是多少? 如果长度不够使用了,自动增长多少倍?

    [笔试题目] 使用Stringbuffer无 参的构造函数创建 一个对象时,默认的初始容量是多少? 如果长度不够使用了,自动增长多少倍? StringBuffer 底层是依赖了一个字符数组才能存储字符 ...

  2. JAVA_SE基础——8.基本数据类型

    基本数据类型有:整数类型.浮点类型.字符类型.布尔类型 整数类型 整数类型用来存储整数数值,即没有小数部分的数值.与C.C++语言相同,整数在Java语言中有3种表示形式:十进制.八进制和十六进制. ...

  3. linux压缩相关命令

    http://blog.csdn.net/mmllkkjj/article/details/6768294

  4. 初学Java Web(1)——Web概述

    已经很久没有更新博客了,过年忙着吃喝玩乐,就怠惰了一小下下?幸好这学期新开的课程都比较有趣--Java Web和Android.至少对于我自己来说,既充满挑战,又富有趣味. --[1.Web概述]-- ...

  5. POJ-1062 昂贵的聘礼---Dijkstra+枚举上界

    题目链接: https://vjudge.net/problem/POJ-1062 题目大意: 中文题 思路: 1是终点,可以额外添加一个源点0,0到任意一节点的距离就是这个点的money,最终求的是 ...

  6. 小技巧-ASP.Net session保存在数据库服务器

    引用博客:http://www.cnblogs.com/lykbk/archive/2013/01/13/hf576856868.html web Form 网页是基于HTTP的,它们没有状态, 这意 ...

  7. 原生js的一些研究和总结(1)

    数据类型 基本类型值包括: undefined,null,Boolean,Number和String,这些类型分别在内存中占有固定的大小空间,它们的值保存在栈空间,我们通过按值来访问的. 引用类型包括 ...

  8. JEECG中出现Java.sql.SQLException: Value 'xxxx' can not be represented as java.sql.Timestamp的解决办法

    出现`Java.sql.SQLException: Value 'xxxx' can not be represented as java.sql.Timestamp',其中xxxx部分对应包含一个看 ...

  9. win10安装Ubuntu14.04双系统

    1 制作镜像 UltralISO刻录镜像到U盘,下载地址:http://pan.baidu.com/s/1o7JpthS 2压缩空间给Ubuntu安装 使用windows自带的压缩(磁盘管理) 3安装 ...

  10. C# 传统四舍五入保留两位小数(网上流传好多错误的版本)

    关于C#里面的Math.Round,很多人都会用到,而且以为是四舍五入,其实不是这样的: C#里面的Math.Round是符合IEEE标准的“四舍五入”,其实是五舍六入. 网上好多流传的下面这种方式实 ...