需求描述:

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

方案和技术点:

存储方式使用 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. 在bootstrap中让竖向排列的输入框水平排列

    在bootstrap中可以使用自带的样式标记来控制样式,但是同时可以利用最原始的css样式来解决达到需求 如下所示可以看出来两个inline-block就可以使得两个水平排列 block和inline ...

  2. Linux--初次体验

    关于Linux已经听闻很久的大名了,但是一直没有机会来使用,这次趁着放假的机会,来体验一把Linux吧. 之前使用visuabox和Ubuntu16,但是虚拟机总是不能连接互联网,在虚拟机上面无法上网 ...

  3. Mego开发文档 - 复杂查询

    复杂查询 Mego 还支持一些更高级的LLINQ查询写法,本文只列出一部分. 分组汇总查询 using (var db = new OrderManageEntities()) { var query ...

  4. Apollo单向SSL认证(1)

    参考链接:https://www.cnblogs.com/benwu/articles/4891758.html keytool -genkey -alias mybroker -keyalg RSA ...

  5. 新概念英语(1-97)A Small Blue Case

    Lesson 97 A small blue case 一只蓝色的小箱子 Listen to the tape then answer this question. Does Mr. Hall get ...

  6. 大数据学习总结(5)参考elk技术架构

  7. 阿里云API网关(11)API的三种安全认证方式

    网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...

  8. tk mybatis通用mapper,复杂and or条件查询

    需求:where查询,需要支持(a or b or c) and d 也就是a.b.c三个条件是或的关系,然后再与d相与. 尝试后,可以通过以下方式处理: 方式1:Weekend语法 Weekend& ...

  9. python/Djangof分页与自定义分页

    python/Djangof分页与自定义分页 Django分页 ##============================================分页==================== ...

  10. Pymsql

    Pymsql 1.创建数据库连接 pymsql connect conn=pymysql.connect(host="localhost",user="root" ...