您的位置:首页 > 移动开发 > IOS开发

iOS searchBar最近搜索结果的实现

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

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: