项目 - 下拉自动弹出搜索框
2015-06-14 10:48
337 查看
项目介绍
下面要实现一个集成下拉弹出搜索框并支持中英文搜索的框架主要功能:
下拉时搜索框自动弹出,没有进行搜索操作,两秒后自动隐身上拉、点击屏幕或点击cancer按钮时搜索框隐藏
支持中英文搜索
演示
实现
下拉弹出 上拉隐藏
上拉下拉的操作都是通过UIscrollView的代理方法进行监听// 开始滑动tableView时调用 - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { [self.view endEditing:YES]; if (self.searchBar.text.length == 0 && self.searchBar.frame.origin.y >= 0) { self.searchBar.frame = CGRectMake(0, -44, self.view.frame.size.width, 44); self.switchTip = 0; } } //手指按住屏幕滚动时调用 - (void)scrollViewDidScroll:(UIScrollView *)scrollView { if (self.switchTip == 0) { if (scrollView.contentOffset.y <= -44) { [UIView animateWithDuration:0.3 animations:^{ //设置searchBarframe, 显示出来 self.searchBar.frame = CGRectMake(0, 0, self.view.frame.size.width, 44); //tableView设置上面间距44 self.tableView.contentInset = 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 { self.tmpItems = [self.searchBar searchContent:searchText InArray:self.items]; [self.tableView reloadData]; } //搜索框结束搜索时调用 - (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar { if (self.searchBar.text.length == 0) { [self performSelector:@selector(closeSearch) withObject:nil afterDelay:2]; } } //点击cancer按钮时执行 - (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar { self.searchBar.text = @""; [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++) { //获取字符range NSRange range = NSMakeRange(i, 1); //获取字符,注意CFStringTransform 接收NSMutableString NSMutableString *keyWord = [[NSMutableString alloc] initWithString:[ZHText substringWithRange:range]]; int keyWordInt = [ZHText characterAtIndex:i]; //判断是否为中文 if (keyWordInt > 0x4e00 && keyWordInt < 0x9fff) { //先转换为latin style CFStringTransform((__bridge CFMutableStringRef)keyWord, 0, kCFStringTransformMandarinLatin, NO); //再转换为Pinyin CFStringTransform((__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哦-_-
相关文章推荐
- sturuts配置
- Epic - Snake Sequence
- SpringMVC学习笔记
- 【ActionScript】定时器,修改组件的透明度
- 编程路上踏出的第一步
- 平川出差之行
- hiho第七周——完全背包(动态规划)
- Effective C++条款04解读:确定对象被使用之前已先被初始化
- Servlet从本地文件中读取图片,并显示在页面中
- 将标准输入复制到标准输出
- 买哪种牌子的笔记本电脑好呢?
- %*d, %*s等在输入输出语句中的作用
- 计算机网络--物理层 的一点总结
- 06Exchange Server 2010跨站点部署-Mailbox网卡配置
- Struts2 重点总结 (2)
- spring <context:component-scan>使用说明(转)
- Boosting算法简介
- IOS的Crash情况在Crashlytics平台上统计解决方案的一点遗憾(截止到2015年6月14日)
- PB中datawindow常用技巧
- addTarget:action:forControlEvents