需求描述:

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

方案和技术点:

存储方式使用 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. 谈谈ASP.NET Core中的ResponseCaching

    前言 前面的博客谈的大多数都是针对数据的缓存,今天我们来换换口味.来谈谈在ASP.NET Core中的ResponseCaching,与ResponseCaching关联密切的也就是常说的HTTP缓存 ...

  2. 剑指offer-删除链表中重复的节点

    题目描述   在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处 ...

  3. ssh框架-Struts2(二)

    上篇文章我们了解了怎么配置struts.xml文件,以及前端控制器配置怎么配置,,Action进阶,Result结果配置,Struts2中的Servlet的API的访问,以及怎么获得请求参数.今天我们 ...

  4. Centos7安装openvpn及客户端配置

    1.openvpn介绍 VPN直译就是虚拟专用通道,是提供给企业之间或者个人与公司之间安全数据传输的隧道,使用OpenSSL加密库中的SSLv3/TLSv1协议函数库. 目前OpenVPN能在Sola ...

  5. sts中maven

    建立一个maven web的工程 网上有很多关于maven的下载,配置等,我这里就不多说了. 下面介绍主要介绍关于在sts中建立一个maven时最开始出现的错误问题. 创建maven工程 file-& ...

  6. redis入门(05)redis的key命令

    一.什么是redis键命令 Redis 键(key):Redis 键命令用于管理 redis 的键. Redis 键命令的基本语法: redis 127.0.0.1:6379> COMMAND ...

  7. GIT入门笔记(8)-- 查看历史提交记录/根据版本号回到过去或未来

    在Git中,用HEAD表示当前版本,也就是最新的提交版本, 上一个版本就是HEAD^, 上上一个版本就是HEAD^^, 往上100个版本写100个^比较容易数不过来,所以写成HEAD~100. Git ...

  8. C# 客户端程序调用外部程序的三种实现

    简介 我们用C#来开发客户端程序的时候,总会不可避免的需要调用外部程序或者访问网站,本篇博客介绍了三种调用外部应用的方法,供参考 实现 第一种是利用shell32.dll,实现ShellExecute ...

  9. PyMySQL模块的使用

    PyMySQL介绍 PyMySQL是在Python3.x版本中用于连接MySQL服务器的一个库,Python2系列中则使用mysqldb.Django中也可以使用PyMySQL连接MySQL数据库. ...

  10. codeforces 761B Dasha and friends

    https://vjudge.net/problem/CodeForces-761B 题意: 有一个圆形跑道,上面有若干个障碍,分别给出两个人距离障碍的距离,问这两个人是否是在同一个跑道上跑步(我是这 ...