文档章节

iOS 搜索记录

o
 osc_x4h57ch8
发布于 2018/04/24 11:21
字数 504
阅读 9
收藏 0

精选30+云产品,助力企业轻松上云!>>>

需求描述:

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

方案和技术点:

存储方式使用 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

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。

暂无文章

聊聊rocketmq-client-go的TraceInterceptor

序 本文主要研究一下rocketmq-client-go的TraceInterceptor TraceInterceptor rocketmq-client-go-v2.0.0/producer/interceptor.go // WithTrace support rocketmq trace: https://github.c......

go4it
13分钟前
0
0
如何在Android文本视图周围添加边框? - How do I put a border around an Android textview?

问题: 是否可以在textview周围绘制边框? 解决方案: 参考一: https://stackoom.com/question/EfXR/如何在Android文本视图周围添加边框 参考二: https://oldbug.net/q/EfXR/How-do-I-put...

法国红酒甜
28分钟前
10
0
设计模式(4) 建造者模式

什么是建造者模式 经典建造者模式的优缺点 对建造者模式的扩展 什么是建造者模式 建造者模式将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。创建者模式隐藏了...

zhixin9001
40分钟前
14
0
ArrayList源码分析 —— JDK8

ArrayList的特性 ArrayList内部使用数据作为存储结构,ArrayList可以理解为数组的扩展对象,封装了常用的和非常用的操作数组的方法。以及当数组长度不足以保存数组时,自动扩容数组,通常Arr...

XuePeng77
47分钟前
42
0
__slots__的用法? - Usage of __slots__?

问题: Python中__slots__的目的是什么-尤其是关于何时以及何时不使用它的目的? 解决方案: 参考一: https://stackoom.com/question/1ymu/slots-的用法 参考二: https://oldbug.net/q/1ym...

富含淀粉
58分钟前
17
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部