iOS searchBar最近搜索结果的实现

来源:互联网 发布:装饰公司软件 编辑:程序博客网 时间:2024/06/07 07:57

实现此功能就需要保存用户的搜索记录, 这样就必须有个本地的小型数据库,我在这里用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];

}

0 0
原创粉丝点击