模糊搜索UISearchBar
#import "Search_ViewController.h"
@interface Search_ViewController ()<UITableViewDataSource,UITableViewDelegate,UISearchDisplayDelegate,UISearchBarDelegate>
@property(nonatomic,strong)NSArray*dataArr;//数据源
@property(nonatomic,strong)NSArray*resultsArr;//搜索结果
@property(nonatomic,strong)UISearchBar*search;
@property(nonatomic,strong)UISearchDisplayController* searchPlay;
@property(nonatomic,strong)UITableView*aTableView;
@end
@implementation Search_ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.title=@"搜索";
_dataArr= [[NSArray alloc]initWithObjects:@"aaa",@"abc",@"aqq",@"bdc",@"gcd",@"mnb",@"zzz",nil];
[self createView];
// Do any additional setup after loading the view.
}
- (void) createView
{
_aTableView= [[UITableView alloc]initWithFrame:CGRectMake(0,0,320,480)];
_aTableView.delegate=self;
_aTableView.dataSource=self;
[self.view addSubview:_aTableView];
}
#pragma mark -
#pragma mark UITableViewDelegate
-(UIView*)tableView:(UITableView*)tableView viewForHeaderInSection:(NSInteger)section
{
_search= [[UISearchBar alloc]initWithFrame:CGRectMake(0,0,320,40)];
_search.backgroundColor= [UIColor redColor];
_search.delegate=self;
_search.showsCancelButton=YES;
_search.keyboardType=UIKeyboardTypeDefault;
_searchPlay= [[UISearchDisplayController alloc]initWithSearchBar:self.search contentsController:self];
_searchPlay.delegate=self;
_searchPlay.searchResultsDataSource=self;
_searchPlay.searchResultsDelegate=self;
_searchPlay.active=NO;
return _searchPlay.searchBar;
}
- (BOOL)searchBarShouldEndEditing:(UISearchBar*)searchBar
{
NSLog(@"取消");
return YES;
}
- (CGFloat)tableView:(UITableView*)tableView heightForHeaderInSection:(NSInteger)section
{
return tableView ==self.searchPlay.searchResultsTableView?0:40;
}
- (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section{
NSInteger row =0;
if([tableView isEqual:self.searchPlay.searchResultsTableView]) {
row = [self.resultsArr count];
}else{
row = [self.dataArr count];
}
return row;
}
- (UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
{
static NSString *CellIdentifier =@"Cell";
UITableViewCell*cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if(!cell) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
if([tableView isEqual:self.searchPlay.searchResultsTableView]) {
cell.textLabel.text= [self.resultsArr objectAtIndex:indexPath.row];
}else{
cell.textLabel.text= [self.dataArr objectAtIndex:indexPath.row];
}
return cell;
}
#pragma mark -
#pragma mark UISearchDisplayControllerDelegate
//text是输入的文本,scope是搜索范围
- (void) searchText:(NSString*)text andWithScope:(NSString*)scope
{
//CONTAINS是字符串比较操作符,
NSPredicate*result = [NSPredicate predicateWithFormat:@"SELF contains[cd] %@",text];
self.resultsArr= [self.dataArr filteredArrayUsingPredicate:result];
}
- (BOOL) searchDisplayController:(UISearchDisplayController*)controller shouldReloadTableForSearchString:(NSString*)searchString
{
// searchString是输入的文本
//返回结果数据读取搜索范围在选择范围
NSArray*searScope = [self.searchPlay.searchBar scopeButtonTitles];//数组范围
[self searchText:searchString andWithScope:[searScope objectAtIndex:[self.searchPlay.searchBar selectedScopeButtonIndex]]];
return YES;
}
- (BOOL) searchDisplayController:(UISearchDisplayController*)controller shouldReloadTableForSearchScope:(NSInteger)searchOption
{
NSString*inputText =self.searchPlay.searchBar.text;//搜索输入的文本
NSArray*searScope = [self.searchPlay.searchBar scopeButtonTitles];//索索范围
[self searchText:inputText andWithScope:[searScope objectAtIndex:searchOption]];
return YES;
}
模糊搜索UISearchBar的更多相关文章
- iOS 如何自定义UISearchBar 中textField的高度
iOS 如何自定义UISearchBar 中textField的高度 只需设置下边的方法就可以 [_searchBar setSearchFieldBackgroundImage:[UIImage i ...
- MySQL中进行模糊搜索的一些问题
在搜索数据库中的数据时,SQL 通配符可以替代一个或多个字符.SQL 通配符必须与 LIKE 运算符一起使用.在 SQL 中,可使用以下通配符:通配符 描述 % 替代一个或多个字符 ...
- iOS之搜索框UISearchController的使用(iOS8.0以后替代UISearchBar+display)
在iOS 8.0以上版本中, 我们可以使用UISearchController来非常方便地在UITableView中添加搜索框. 而在之前版本中, 我们还是必须使用UISearchBar + UISe ...
- 更改UIsearchbar 的背景和cancel按钮(转)
修改背景 searchbar =[[UISearchBar alloc]initWithFrame:CGRectMake(,KTopBarHeight, , KTopBarHeight)]; sear ...
- UISearchBar控件-让我们来搞定!(转)
转载自:http://blog.sina.com.cn/s/blog_7b9d64af0101dfg8.html 最近用到搜索功能.于是,经过不断的研究,终于,有点懂了. 那就来总结一下吧,好 ...
- 使用 JavaScript 实现简单候选项推荐功能(模糊搜索)【收藏】【转】
当我们使用 Google 等搜索功能时,会出现与搜索内容有关的候选项.使用 JavaScript 搜索字符串,通常会使用 indexOf 或者 search 函数,但是非常僵硬,只能搜索匹配特定词语. ...
- iOS开发——UI进阶篇(十九)UISearchBar控件简介
最近用到搜索功能.总结一下 搜索,无疑可以使用UISearchBar控件! 那就先了解一下UISearchBar控件吧! UISearchBar控件就是要为你完成搜索功能的一个专用控件.它集成了很多你 ...
- IOS开发UISearchBar失去第一响应者身份后,取消按钮不执行点击事件的问题
在iOS开发中,使用UISearchBar的时候,当搜索框失去焦点的时候,取消按钮是默认不能点击的,如图按钮的颜色是灰色的: 这是因为此时取消按钮的enabled属性被设置为NO了,那么当我们需要让 ...
- 修改UISearchBar的背景颜色
当你看到这篇博客你就已经发现了用_searchBar.backgroundColor = [UIColor clearColor];来设置UISearchBar的颜色完全没有效果: 并且,有些方法是想 ...
随机推荐
- Hook to function
myFun.h 1: #include <stdio.h> 2: 3: void __cyg_profile_func_enter(void *this_fn, void *call_s ...
- ios clang: error: linker command failed with exit code 1 (use -v to see invocation)解决方法
当xcode编译时出现这个错误,一般是你的编译源码中存在重复的源码 解决方法:"Build Phases" -> "Compile Sources" 去删 ...
- HttpClient_httpclient中使用HTTPS的方法
import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustMa ...
- 常用正则表达式(?i)忽略字母的大小写!
1.^/d+$ //匹配非负整数(正整数 + 0) 2.^[0-9]*[1-9][0-9]*$ //匹配正整数 3.^((-/d+)|(0+))$ //匹配非正整数(负整数 + 0) 4.^-[0-9 ...
- PHP 常用到的一些小程序
1.计算两个时间的相差几天 $startdate=strtotime(“2009-12-09”); $enddate=strtotime(“2009-12-05”); 上面的php时间日期函数strt ...
- os模块
os模块 posix(unix) nt(win) mac import osprint(os.name) #nt os和sys的区别: os是负责程序和操作系统之间的交互. os.path (是一个 ...
- 大数据技术hadoop入门理论系列之二—HDFS架构简介
HDFS简单介绍 HDFS全称是Hadoop Distribute File System,是一个能运行在普通商用硬件上的分布式文件系统. 与其他分布式文件系统显著不同的特点是: HDFS是一个高容错 ...
- dtd语法之定义元素
1.语法:<!ELEMENT 元素名 使用规则> 使用规则: l (#PCDATA) :表示内容为普通文本数据 l EMPTY :表示元素内容必须为空 l ANY :元素出现任意次,一般用 ...
- SqlServer表数据与excel中数据的互相复制
一.SqlServer表数据复制到excel 1.新建查询,用sql语句把表数据读出来 2.然后,选择数据,右键,复制(也可以点击连同标题复制),复制到记事本中(不然会乱码) 3.然后再把记事本的内容 ...
- PHP 设计模式 笔记与总结(11)观察者模式
[观察者模式(Observer)]当一个对象状态发生改变时,依赖它的对象全部会收到通知,并自动更新 [场景]一个事件发生后,要执行一连串更新操作.传统的编程方式,就是在事件的代码之后直接加入处理逻辑. ...