项目 - 下拉自动弹出搜索框
来源:互联网 发布:俄罗斯 美国 知乎 编辑:程序博客网 时间:2024/06/06 04:19
项目介绍
下面要实现一个集成下拉弹出搜索框并支持中英文搜索的框架
主要功能:
下拉时搜索框自动弹出,没有进行搜索操作,两秒后自动隐身
上拉、点击屏幕或点击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哦-_-
2 0
- 项目 - 下拉自动弹出搜索框
- 百度搜索框输入值后自动弹出的下拉框的测试(可应用到很多场景)
- 关于Combo控件下拉框自动弹出的问题
- jquery UI autocomplete获得焦点自动弹出跟随下拉框
- kendoComboBox 下拉搜索自动提示
- js实现 下拉框自动补全搜索功能
- easyui的combobox,自动搜索的下拉框
- php+ajax做搜索下拉自动提示框
- HTML------简单的搜索框自动弹出内容提示
- js jquery搜索下拉框 自动选中 搜索到结尾处从头搜索
- 自定义下拉弹出框
- android下拉弹出框
- 点击弹出下拉框
- IE7 自动弹出下拉菜单错误
- GridEH的PickList自动弹出下拉
- 搜索下拉框
- 下拉框支持搜索
- 搜索下拉框级联
- SpringMVC学习笔记
- 【ActionScript】定时器,修改组件的透明度
- A better life
- Tone Mapping
- &(((AClass*)0)->aProperty) 这样的表达式会报错吗?
- 项目 - 下拉自动弹出搜索框
- IPsecVPN与IPV6
- 用pb实现Flash动画播放
- ios项目开发流程
- SpringMVC上传文件
- Effective C++条款03解读:尽可能使用const
- 深入学习xUtils
- JavaScript之DOM总结
- 2015.6.14用文件保存学生名单