需求描述:

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

方案和技术点:

存储方式使用 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. kafka安装使用和遇到的坑

    下载安装 参考:https://segmentfault.com/a/1190000012730949 ​ https://kafka.apache.org/quickstart 关闭服务 关闭zoo ...

  2. SpringBoot应用的监控与管理

    spring-boot-starter-actuator模块 /health /autoconfig /beans /configprops:应用配置属性信息 /env:环境属性,如:环境变量.jvm ...

  3. Docker学习笔记 - Docker的镜像

    一个容器实际上是运行在宿主机上的一个进程. 只不过在启动这个进程之前进行了一些特殊处理,让这个容器进入了一个全新的虚拟环境,与宿主机的环境分开, 所以这个进程及其子进程认为自己运行在一个独立的世界里面 ...

  4. JavaScript作用域那些事

    作用域 (1).作用域也叫执行环境(execution context)是JavaScript中一个重要的概念.执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为.在JavaScript ...

  5. requests-post请求

    post与get方法的区别在于post需要提交一些数据以备处理. 在requests里面非常简单,headers,data都是直接加进去就可以了 # requests.post提交表单# 有些网站使用 ...

  6. Angular筛选功能

    业务场景:依据级别(level )和主题(Subtype )向后台传参数,进行筛选向前台返回数据列表. 代码如下:其中filterChoose()用于弹出筛选下拉框,filterButton()用于选 ...

  7. 如何用Math.max.apply()获取数组最大/小值

    最近似乎对JavaScript有点兴趣了~~~打算好好钻研这个东西.可是,一开始就遇到问题了!!! Math.min.apply(obj,args);//这个obj对象将代替Function类里thi ...

  8. YII2框架下使用PHPExcel导出柱状图

    导出结果: 首先,到官网下载PHPExcel插件包,下载后文件夹如下: 将Classes文件夹放入到项目公共方法内. 新建控制器(访问导出的方法):EntryandexitController < ...

  9. Python面向对象——基本继承

    1.基本继承图解 1.1实例化一个Contact类的对象c 1.2实例化一个Supplier类的对象s 1.3访问对象的属性 1.4访问对象s的方法 1.5类变量详解 如果从新定义c.all_cont ...

  10. MySQL操作与修改表

    插入数据(insert) insert语句的3个主要组成部分: 所要插入数据的表的名称: 表终需要使用的列的名称: 需要插入到列的值. 数字型主键生成机制 数字型主键生成机制,除了随机选择数字外,还可 ...