iOS 搜索记录
需求描述:
使用单独的搜索界面, 提供用户进行搜索并留下搜索记录. 搜索记录可以提供用户进行再次搜索, 或者把搜索记录清空.
方案和技术点:
存储方式使用 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 搜索记录的更多相关文章
- js实现搜索记录列表
<div class="sy_div28"> <div class="sy_div23"> <span>搜索历史</s ...
- elastic search6.2.2 实现用户搜索记录查询(去重、排序)
elastic search6.2.2 实现搜索记录查询 ,类似新浪微博这种,同样的搜索记录后面时间点的会覆盖前面的(主要思路:关键词去重,然后按时间排序) 先创建索引 //我的搜索 PUT my_s ...
- 微信小程序开发之带搜索记录的搜索框
实现功能:点击搜索框,有搜索记录时以下拉菜单显示,点击下拉子菜单,将数据赋值到搜索框,点击搜索图标搜索,支持清空历史记录,可手动输入和清空查询关键字, UI: wxml: <!--查询历史记录数 ...
- Android 淘宝搜索记录分析及千牛数据库名称关联
一 taobao搜索关键字分析1.导出淘宝数据文件夹.2.搜索search 找到search文件夹.查看里面可疑文件如history_8d4255cc9c9199c6ec3be940936986b9. ...
- iOS 搜索条使用详解
在ios开发中搜索条的使用挺常见的,不过之前一直没用到也没细细研究,最近做外包项目的时候刚好用到,在这里记录一下使用的过程,只要理解了原理,其实还是比较简单的!上传的图片有点大,刚好可以看清楚它的使用 ...
- mysqlbinlog快速遍历搜索记录 (转)
目标,开发人员说有个数据莫名其妙添加了,但是不知道是从哪里添加的,而且应用功能里面不应该添加这样的数据,为了查清楚来源,所 以我就准备去binlog里面找了,但是binlog有好几个月的数,我这样一个 ...
- ios项目记录
1,如何隐藏状态栏 在基类中重载UIViewController.h中的这个方法 - (BOOL)prefersStatusBarHidden { // iOS7后,[[UIApplication s ...
- iOS搜索框
在iOS8以前搜索框是作为一个控件添加到TableViewController中, 有系统自带的搜索变量self.searchDisplayController 遵守一个搜索显示的协议<UISe ...
- 使用localStorage保存搜索记录
//过滤一个结果的空记录添加,过滤空搜索 默认保存10条记录,自己可修改 function setHistoryItems(keyword) { keyword = keyword.replace(& ...
随机推荐
- JAVA_SE基础——11.Java中的运算符
在程序设计中,运算符应用得十分广泛,通过运算符可以将两个变量进行任意运算.数学中的"+"."-"."*"."/"运算符同 ...
- php的格式化数字函数
php格式化数字:位数不足前面加0补足 php格式化数字:位数不足前面加0补足 感谢:http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/12 ...
- LeetCode & Q38-Count and Say-Easy
String Description: The count-and-say sequence is the sequence of integers with the first five terms ...
- Linux下安装jmeter
一.用Xftp上传apache-jmeter-2.13.tgz到Linux系统里 二.解压apache-jmeter-2.13.tgz,tar xzfv apache-jmeter-2.13.tgz ...
- 翻译:JVM虚拟机规范1.7中的运行时常量池部分(一)
原文链接: https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.4 Java Virtual Machine i ...
- Android:ImageView控件显示图片
1)android显示图片可以使用imageView来呈现,而且也可以通过ImageButton来实现给button添加图片. 2)在创建一个ImageView后,显示图片绑定元素是:android: ...
- C# 关键字替换
/// <summary> /// 关键字替换 /// </summary> /// <param name="body"></param ...
- 云如何让App开发更简单?
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 互联网"下半场",移动App开发对于质量.速度的要求更加苛刻.4月初,腾讯云正式上线移动开发平台MobileLine,借 ...
- c++模板使用及实现模板声明定义的分离
c++模板是编译器构造具体实例类型的模型,使类型参数化,是泛型编程的基础,泛型就是独立于特定类型. 一.模板分为函数模板和类模板两种. 函数模板:template <class 形参名,clas ...
- 简单的sql调优(批处理)
最近在写一个java的爬虫程序时,遇到了一个大量数据进行插入更新和大量数据循环查询的问题,所以查了一下一般的调优的方式,下面主要介绍我采取的调优措施. 一 .调优思路 先说说我采取方式的调优的思路,这 ...