一:添加searchBar的两种方式:
////////////添加搜索栏方式一:直接画一个,画不好的话会覆盖别的东西/////
self.tableView.backgroundView = [[UIView alloc] init];
[self.tableView setBackgroundColor:[UIColor clearColor]];
UISearchBar *mySearchBar = [[UISearchBar alloc]
initWithFrame:CGRectMake(0.0, 0.0, self.view.bounds.size.width, 45)];
mySearchBar.delegate = self;
mySearchBar.showsCancelButton = NO;
mySearchBar.barStyle=UIBarStyleDefault;
mySearchBar.placeholder=@"Enter Name or Categary";
mySearchBar.keyboardType=UIKeyboardTypeNamePhonePad;
[self.view addSubview:mySearchBar];
[mySearchBar release];
/////////////添加搜索栏方式二:添加置tableView上////////////////
UISearchBar *searchBar = [[UISearchBar alloc]initWithFrame:CGRectMake(0.0, 0.0, self.view.bounds.size.width,40)];
searchBar.placeholder=@"Enter Name";//默认搜索框文本内容;
searchBar.barStyle = UIBarStyleBlackTranslucent;//设置bar的风格
searchBar.delegate = self;
self.tableView.tableHeaderView = searchBar;//将searchBar添加到tableView上;且searchBar添加到tableView的头,注意滚动出屏幕后,搜索框也不在了,只出现在首页
searchBar.autocorrectionType = UITextAutocorrectionTypeNo;//是否自动对输入文本对象进行风格校正
searchBar.autocapitalizationType = UITextAutocapitalizationTypeNone;//设置什么时候用大写
searchBar.backgroundColor = [UIColor redColor];//设置bar的背景颜色;
searchBar.backgroundImage = [UIImageimageNamed:@"item.png"];//修改背景图片
searchBar.showsSearchResultsButton =YES;//是否在控件的右端显示搜索结果按钮
searchBar.showsCancelButton = YES;
searchBar.showsScopeBar = YES;//控制搜索栏下部的选择栏是否显示出来
searchBar.prompt = @"ewq";//显示在控件顶部的一行提示文字
searchBar.translucent = YES;//指定控件是否会有透视效果
二、searchBar的结构了解:
iPhone开发之UISearchBar学习是本文要学习的内容,主要介绍了UISearchBar的使用,不多说,我们先来看详细内容。关于UISearchBar的一些问题。
1、修改UISearchBar的背景颜色
UISearchBar是由两个subView组成的,一个是UISearchBarBackGround,另一个是UITextField. 要IB中没有直接操作背景的属性。方法是直接将 UISearchBarBackGround移去 (主要是了解这段话,其实换背景图片和背景颜色可以直接换。了解后可用于换searchBar的样式)
for (UIView *subview in searchBar.subviews)
{
if ([subview isKindOfClass:NSClassFromString(@"UISearchBarBackground")])
{
[subview removeFromSuperview];
break;
}
}
第二种解决的方法:
[[searchBar.subviews objectAtIndex:0]removeFromSuperview];
换cancel的样式:
for(id cc in [searchBar subviews])
{
if([cc isKindOfClass:[UIButton class]])
{
UIButton *btn = (UIButton *)cc;
[btn setTitle:@"取消" forState:UIControlStateNormal];
}
}
三、serarBar的属性及代理:
属性: | 作用 |
UIBarStyle barStyle | 控件的样式 |
id delegate | 设置控件的委托 |
NSString *text | 控件上面的显示的文字 |
NSString *prompt | 显示在顶部的单行文字,通常作为一个提示行 |
NSString *placeholder | 半透明的提示文字,输入搜索内容消失 |
BOOL showsBookmarkButton | 是否在控件的右端显示一个书的按钮(没有文字的时候) |
BOOL showsCancelButton | 是否显示cancel按钮 |
BOOL showsSearchResultsButton | 是否在控件的右端显示搜索结果按钮(没有文字的时候) |
BOOL searchResultsButtonSelected | 搜索结果按钮是否被选中 |
UIColor *tintColor | bar的颜色(具有渐变效果) |
BOOL translucent | 指定控件是否会有透视效果 |
UITextAutocapitalizationType autocapitalizationType |
设置在什么的情况下自动大写 |
UITextAutocorrectionType autocorrectionType |
对于文本对象自动校正风格 |
UIKeyboardType keyboardType |
键盘的样式 |
NSArray *scopeButtonTitles | 搜索栏下部的选择栏,数组里面的内容是按钮的标题 |
NSInteger selectedScopeButtonIndex | 搜索栏下部的选择栏按钮的个数 |
BOOL showsScopeBar | 控制搜索栏下部的选择栏是否显示出来 |
代理列表:
编辑代理
– searchBar:textDidChange:
– searchBar:shouldChangeTextInRange:replacementText:
– searchBarShouldBeginEditing:
– searchBarTextDidBeginEditing:
– searchBarShouldEndEditing:
– searchBarTextDidEndEditing:
– searchBarBookmarkButtonClicked:
– searchBarCancelButtonClicked:
– searchBarSearchButtonClicked:
– searchBarResultsListButtonClicked:
– searchBar:selectedScopeButtonIndexDidChange:
利用UISearchBar的委托事件 textDidChange, 当在搜索框中输入完成后,如果输入的文本长度>0,可以调用自己的搜索方法,得到搜索结果,然后再reloadData,刷新一下。如果输入文本长 度<0,则需要恢复到原始数据。这个方法可以在边输入搜索文本边显示结果。 如果需要按“search”按钮再搜索,则将上述操作放在searchBarSearchButtonClicked中。
searchBar的范围控件showsScopeBar,官方学名叫Scope Buttons。
首先就要设置这个属性:
self.searchBar.showsScopeBar = YES;
然后要给他添加按钮。比如说,这样:self.searchBar.scopeButtonTitles = [NSArray arrayWithObjects:@"BOY",@"GIRL",@"ALL",nil];
还有一个很重要的事情就是我们要实现这个代理UISearchBarDelegate里的这个方法searchBar:selectedScopeButtonIndexDidChange:。告诉表格,你选择的范围是啥。
还有要是设置默认选择哪个按钮的话,要设置这个属性,像这样就是默认选中第1个啦。
self.searchBar.selectedScopeButtonIndex = 0;
四、UISearchDisplayController使用:
利用UISearchDisplayController可以简化很多操作,也能达到搜索的目的。
属性:
active————是搜索界面可视化,默认为no,可用setActive方法设置.
delegate————委托
searchBar————在searchdisplaycontroller初始化后,searchbar是不可修改的,是readonly属性的.
searchContentController————管理搜索内容的试图控制器,一般是一个UITableViewController的实例,意思是针对一个UITableView的内容进行搜索
searchResultsDataSource————搜索结果的数据源
searchResultsDelegate————搜索结果的委托
searchResultsTableView————搜索结果要展示在哪个tableview中(read-only);
searchResultsTitle————搜索结果视图的title
初始化一个searchDisplayController:
在正常初始化完一个searchBar后再加上如下代码:
UISearchDisplayController * searchdispalyCtrl = [[UISearchDisplayController alloc] initWithSearchBar:theSearchBar contentsController:self];
searchdispalyCtrl.active = NO;
searchdispalyCtrl.delegate = self;
searchdispalyCtrl.searchResultsDelegate=self;
searchdispalyCtrl.searchResultsDataSource = self;
使用UISearchDisplayDelegate的委托方法进行搜索操作:
1.搜索状态改变:
– searchDisplayControllerWillBeginSearch:
– searchDisplayControllerDidBeginSearch:
– searchDisplayControllerWillEndSearch:
– searchDisplayControllerDidEndSearch:
2.装载和卸载tableview:
– searchDisplayController:didLoadSearchResultsTableView:
– searchDisplayController:willUnloadSearchResultsTableView:
3.显示和隐藏tableview:
– searchDisplayController:willShowSearchResultsTableView:
– searchDisplayController:didShowSearchResultsTableView:
– searchDisplayController:willHideSearchResultsTableView:
– searchDisplayController:didHideSearchResultsTableView:
4.搜索条件改变时响应:
– searchDisplayController:shouldReloadTableForSearchString:
– searchDisplayController:shouldReloadTableForSearchScope:
searchDisplayController 自身有一个searchResultsTableView,所以在执行操作的时候首先要判断是否是搜索结果的tableView,如果是显示的就是搜索结 果的数据,如果不是,是TableView自身的view,则需要显示原始数据。
if(tableView == self.searchDisplayController.searchResultsTableView)
{
arr = [self.filterContent valueForKey:key]; //搜索结果
}
else
{
arr = [self.localresource valueForKey:key]; //原始数据
}
这样就不需要每次都realoadData了。
UISearchBar *searchBar=[[UISearchBaralloc]initWithFrame:CGRectMake(0, 0, 320, 44)];