Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 703|回复: 0

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

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-6 11:05
  • 签到天数: 748 天

    [LV.9]以坛为家II

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    705612
    发表于 2021-7-22 16:47:26 | 显示全部楼层 |阅读模式

     

    注:原文: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>
    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-4-20 07:43 , Processed in 0.085745 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表