注:原文:http://www.zhimengzhe.com/IOSkaifa/40433.html

1.首先,我们需要对进行过搜索的textField的输入内容进行一个NSUserDefaults的本地保存,由于我这里是利用的后台接口处理的具体关键字搜索,如果有做本地搜索的需要自行修改一下。那么我们就在搜索了之后(也就是点击了“前往”那个按钮之后,跳转到下一个界面之前)进行保存即可。这样做的目的有两个:a.避免无效搜索占用本地保存的内存,也就是在textFiled中输入了,但是没有进行搜索,或者说节省了因为用户的取消操作而占用的内存 b.执行逻辑:在搜索之后对搜索的内容关键字进行本地保存处理

2.我们需要利用一个全局的NSMutableArray来保存搜索的内容,每一次点击键盘上的“搜索”时,都对这个NSMutableArray进行一次判断:如果其有内容,就将其mutableCopy到我们相应方法中的这个局部的NSMutableArray中,这样,我们之前所保存在这个全局的NSMutableArray中的数据就会添加到这个局部的NSMutableArray中,之后,我们将输入的内容也添加进这个局部的NSMutableArray中,这样就达到了不断向NSMutableArray中添加数据的目的,而不是每一次都只能取得到一个内容

3.在-(void)viewWillAppear:(BOOL)animated中读取历史记录并在tableView中显示

以上便是大致思路,看一遍代码基本上就理解了,还是不明白的欢迎留言

代码实现:

保存和读取历史记录

code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<code>-(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
//    NSString * searchHistory = [MyUtil getObjectForKey:@"searchHistory"];
//    if (searchHistory) {
//        [self.historyArray addObject:searchHistory];
//        [self.tableView reloadData];
//    }
    [self readNSUserDefaults];
}
  
-(void)textFieldDidBeginEditing:(UITextField *)textField
{
    DLog(@"开始搜索");
    self.tableView.hidden = NO;
}
  
  
-(IBAction)go:(UITextField *)sender {
    DLog(@"点击go");
    if (self.textField.text.length == 0) {
        [MyUtil showTipText:@"搜索内容不能为空"];
        return;
    }
//        [MyUtil saveObject:self.textField.text forKey:@"searchHistory"];
        [self SearchText:self.textField.text];
     
        GYSearchDetailedViewController * searchDetailed = getViewController(@"searchDetailed", @"FindDoctor");
        searchDetailed.searchInfo = self.textField.text;
        [self.navigationController pushViewController:searchDetailed animated:YES];
    
     
}
  
-(void)SearchText:(NSString *)seaTxt
{
//    NSUserDefaults *userDefaultes = [NSUserDefaults standardUserDefaults];
//    //读取数组NSArray类型的数据
//    self.historyArray = [userDefaultes arrayForKey:@"searchHistory"];
     
//    NSMutableArray *searTXT = [self.historyArray mutableCopy];
    NSMutableArray *searTXT = [[NSMutableArray alloc] init];
    if (self.historyArray) {
        searTXT = [self.historyArray mutableCopy];
    }
    [searTXT addObject:seaTxt];
     
    //将上述数据全部存储到NSUserDefaults中
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    [userDefaults setObject:searTXT forKey:@"searchHistory"];
}
  
-(void)readNSUserDefaults
{
    NSUserDefaults *userDefaultes = [NSUserDefaults standardUserDefaults];
    //读取数组NSArray类型的数据
//    NSArray *myArray = [userDefaultes arrayForKey:@"searchHistory"];
//    NSLog(@"myArray======%@",myArray);
    self.historyArray = [userDefaultes arrayForKey:@"searchHistory"];
    [self.tableView reloadData];
}
 
</code>

删除历史记录

code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<code>//cell允许编辑
-(BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
    return YES;
}
  
//删除历史记录
-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
     
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        [self.historyArray removeObjectAtIndex:indexPath.row - 1];
  
        [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
         
    }
}
  
//修改编辑按钮文字
-(NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return @"删除";
}</code>

[分享]IOS开发-简单实现搜索框显示历史记录的本地缓存及搜索历史每次只能获取到一个的解决方案的更多相关文章

  1. [转载]iOS开发:获取设备信息

    开发iOS平台的应用的时候,可以获取iOS设备的设备信息,包括设备的名称,设备的机型,设备的iOS版本等等.设备信息主要来自 UIDevice 类. UIDevice *currentDevice = ...

  2. jQuery实现搜索框插件+豆瓣音乐接口实现豆瓣搜索框

    jQuery实现搜索框插件 豆瓣音乐接口实现豆瓣搜索框 豆瓣接口有时不稳定,网络请求会报400,不要惊慌.我主要是练习一下jQuery的JSONP和封装插件. <div class=" ...

  3. Day12-微信小程序实战-交友小程序-优化“附近的人”页面与serach组件的布局和样式以及搜索历史记录和本地缓存*内附代码)

    回顾/:我们已经实现了显示附近的人的功能了,可以多个人看到附近的人页面了 但是还是要进行优化有几个问题:1.我们用户选择了其他的自定义头像之后,在首页可以看到头像的变化,但是在附近的人中头像会变成报错 ...

  4. 【好程序员笔记分享】——iOS开发之使用TextField作为搜索框

    -iOS培训,iOS学习-------型技术博客.期待与您交流!------------ iOS开发之使用TextField作为搜索框     今天给大家带来一个新的技巧,比如平时我们要使用代码创建一 ...

  5. iOS开发简单介绍

    概览 终于到了真正接触IOS应用程序的时刻了,之前我们花了很多时间去讨论C语言.ObjC等知识,对于很多朋友而言开发IOS第一天就想直接看到成果,看到可以运行的iOS程序.但是这里我想强调一下,前面的 ...

  6. 【好程序员笔记分享】——iOS开发之纯代码键盘退出

    -iOS培训,iOS学习-------型技术博客.期待与您交流!------------ iOS开发之纯代码键盘退出(非常简单)     iOS开发之纯代码键盘退出 前面说到了好几次关于键盘退出的,但 ...

  7. iOS开发-简单工厂模式

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性.概念很长,iOS开发中最常 ...

  8. ios外包公司——技术分享:IOS开发教程

        iOS入门培训,适合已经有C/C++/Java/C#基础的人学习.   本大仙主讲,总共4讲(第4讲尚在制作中),这仅仅是iOS开发的入门而已.学完本教程,应该已经足够你自学并开发app了. ...

  9. iOS开发 简单实现视频音频的边下边播 (转)

      1.ios视频音频边缓存边播放,缓存时可以在已下载的部分拖拽进度条. 3.无论是下载到一半退出还是下载完退出,已缓存的数据都存到自己指定的一个路径.如果已下载完,下次播放时可以不再走网络,直接播放 ...

随机推荐

  1. 数据结构:后缀自动机 WJMZBMR讲稿的整理和注释

    链接放在这里,有点难理解,至少我个人是的. 后缀自动机是一种有限状态自动机,其功能是识别字符串是否是母串的后缀.它能解决的问题当然不仅仅是判断是不是后缀这种事,跟字符串的连续子串有关的问题都可以往这个 ...

  2. webpack练手项目之easySlide(二):代码分割(转)

    在上一篇 webpack练手项目之easySlide(一):初探webpack  中我们一起为大家介绍了webpack的基本用法,使用webpack对前端代码进行模块化打包. 但是乍一看webpack ...

  3. 洛谷 P1803 凌乱的yyy Label:Water 贪心

    题目背景 快noip了,yyy很紧张! 题目描述 现在各大oj上有n个比赛,每个比赛的开始.结束的时间点是知道的. yyy认为,参加越多的比赛,noip就能考的越好(假的) 所以,他想知道他最多能参加 ...

  4. jQuery Ajax遍历表格,填充数据,将表格中的数据一条一条拼成Jason数组

    $.ajax({ url: baseURL + "InvoiceSale/OnQuotaInvoiceSale", //点击核销单号时,点击核销时,交互的页面           ...

  5. spring源码学习之路---深入AOP(终)

    作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 上一章和各位一起看了一下sp ...

  6. 配置安装CocoPods后进行 项目基本配置

    配置安装CocoPods后进行 项目基本配置总结 1)终端在文件根目录下输入 $ touch Podfile 创建一个空白的Podfile文件 2)然后在使用编辑器打开Podfile文件进行需要配置的 ...

  7. Java_CookieUtil

    package com.willow.util; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequ ...

  8. jQuery学习笔记(一):入门【转】

    由于工作的需要,发现JQuery是一个绕不开的东西,现在开始学习. 一.JQuery是什么 JQuery是什么?始终是萦绕在我心中的一个问题: 借鉴网上同学们的总结,可以从以下几个方面观察. 不使用J ...

  9. 应对Memcached缓存失效,导致高并发查询DB的四种思路(l转)

    当Memcached缓存失效时,容易出现高并发的查询DB,导致DB压力骤然上升. 这篇blog主要是探讨如何在缓存将要失效时,及时地更新缓存,而不是如何在缓存失效之后,如何防止高并发的DB查询. 解决 ...

  10. viso 由于形状保护和/或图层属性设置不能进行编辑

    viso 由于形状保护和/或图层属性设置不能进行编辑 2003: 若要变通解决此问题,删除 从删除 的保护属性,当您尝试删除一个受保护的组件.若要这样做,请按照下列步骤操作:在 Visio 2003或 ...