项目介绍
下面要实现一个集成下拉弹出搜索框并支持中英文搜索的框架
主要功能:演示
实现下拉弹出 上拉隐藏
上拉下拉的操作都是通过UIscrollView的代理方法进行监听
// 开始滑动tableView时调用- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{[self.view endEditing:YES];== >= 0) {= CGRectMake(, 44);self.switchTip = 0;}}//手指按住屏幕滚动时调用- (void)scrollViewDidScroll:(UIScrollView *)scrollView{if (self.switchTip == 0){if (scrollView.contentOffset.y <= -44){[UIView animateWithDuration:0.3 animations:^{= CGRectMake(, 44);= UIEdgeInsetsMake(44, 0, 0, 0);}];//设置2s后关闭搜索框[self performSelector:@selector(closeSearch) withObject:nil afterDelay:2];self.switchTip = 1;}}}搜索框编辑
对搜索框操作的监听是由UISearchBarDelegate 这个代理的方法实现的
#pragma mark – UISearchBarDelegate//当searchBar开始编辑,即当点击搜索框时- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar{[self.searchBar becomeFirstResponder];}//当在搜索框输入文字时调用- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{searchContent:searchText InArray:self.items];[self.tableView reloadData];}//搜索框结束搜索时调用- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar{== 0){[self performSelector:@selector(closeSearch) withObject:nil afterDelay:2];}}//点击cancer按钮时执行- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar{= @””;[self.tmpItems removeAllObjects];[self.tableView reloadData];[self.searchBar resignFirstResponder];}中英文搜索
这部分主要解决的问题:
中英文混合字符串转换
中文转换为拼音其他字母、字符保持不变
对检索关键词进行搜索
对检索关键词和搜索池中的字符串都进行转换把检索到的字符串放到新数组中返回
不多说,直接上代码:
#pragma mark – 中文转换为拼音字符串- (NSString *)ZHStringChangeToEN:(NSString *)ZHText{NSMutableString *stringResult = [NSMutableString string];for (int i=0; i<ZHText.length; i++){//获取字符rangeNSRange range = NSMakeRange(i, 1);//获取字符,注意CFStringTransform 接收NSMutableStringNSMutableString *keyWord = [[NSMutableString alloc] initWithString:[ZHText substringWithRange:range]];int keyWordInt = [ZHText characterAtIndex:i];//判断是否为中文if (keyWordInt > 0x4e00 && keyWordInt < 0x9fff){//先转换为latin styleCFStringTransform((__bridge CFMutableStringRef)keyWord, 0, kCFStringTransformMandarinLatin, NO);//再转换为PinyinCFStringTransform((__bridge CFMutableStringRef)keyWord, 0, kCFStringTransformStripDiacritics, NO);}[stringResult appendString:keyWord];}return stringResult;}//对关键字进行索引- (NSMutableArray *)searchContent:(NSString *)searchText InArray:(NSArray *)array{NSString *upperSearchString = [[NSString alloc] init];NSString *upperSearchPoolString = [[NSString alloc] init];NSMutableArray *searchResultArray = [NSMutableArray array];upperSearchString = [[self ZHStringChangeToEN:searchText] uppercaseString];for (int i=0; i<array.count; i++){upperSearchPoolString = [[self ZHStringChangeToEN:array[i]] uppercaseString];if ([upperSearchPoolString containsString:upperSearchString]){[searchResultArray addObject:array[i]];}}return searchResultArray;}遇到问题
中文字符直接串转拼音,,拼音间会有空格,对于连续的词就不能进行检索
解决方法就是对字符串单个字符进行转化,然后再拼接起来
搜索框2s后自动隐藏,如果2s以内进行上拉操作,则搜索框不隐藏
在- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView 这个方法中隐藏搜索框
GitHub
https://github.com/HuanDay/EasySearchBar
感觉不错的小伙伴给个star哦-_-
你可以用爱得到全世界,你也可以用恨失去全世界