实现此功能就需要保存用户的搜索记录, 这样就必须有个本地的小型数据库,我在这里用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;
}
这里向数组中添加元素的时候需要将之前倒序的数组再倒序(也就是向正序数组的最后一个位置插入一个元素),这时候要把正序的数组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];
}