iOS searchBar最近搜索结果的实现

实现此功能就需要保存用户的搜索记录, 这样就必须有个本地的小型数据库,我在这里用NSUserDefault来做例子。


首先在页面的初始化方法中初始化一个数组,由于保存本地时候需要json化数组转化为字符串,所以取的时候也就要反json化这个字符串。


最近搜索记录都是展示最近的一条的记录,这样就需要将数组的元素进行倒序排列。

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {

    if (self = [superinitWithNibName:nibNameOrNilbundle:nibBundleOrNil]) {

        //取保存在本地的字符串

        _recentString = [[NSUserDefaultsstandardUserDefaults]objectForKey:@"recentArray"];

        //倒序数组排列  这里的JSONObject方法是一种封装好的转json字符串为数组的方法(本人用的MJExtension里封装好的)

        _recentArray = (NSMutableArray *)[[[NSMutableArrayarrayWithArray:[_recentStringJSONObject]]reverseObjectEnumerator]allObjects];

    }

    returnself;

}



其次是在searchBar的代理方法进行操作。我这里做了对搜索记录的去重的操作。

这里向数组中添加元素的时候需要将之前倒序的数组再倒序(也就是向正序数组的最后一个位置插入一个元素),这时候要把正序的数组json化为字符串保存到本地。最后将正序的数组再次倒序,显示最近的搜索记录。

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {

    //搜索去重

    self.recentArray = (NSMutableArray *)[[self.recentArrayreverseObjectEnumerator]allObjects];

    if (self.recentArray.count) {

        for (int i = 0; i < self.recentArray.count; i++) {

            if (![self.searchBar.textisEqualToString:self.recentArray[i]]) {

                [self.recentArrayaddObject:self.searchBar.text];

                break;

            }

        }

    }

    else {

        [self.recentArrayaddObject:self.searchBar.text];

    }

    [[NSUserDefaultsstandardUserDefaults]setObject:[self.recentArrayJSONString]forKey:@"recentArray"];

    [[NSUserDefaultsstandardUserDefaults]synchronize];

    self.recentArray = (NSMutableArray *)[[self.recentArrayreverseObjectEnumerator]allObjects];

    [self.recentCollectionViewreloadData];

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值