searchBar控件
那就先了解一下UISearchBar控件吧!
UISearchBar控件就是要为你完成搜索功能的一个专用控件。它集成了很多你意想不到的功能和特点!
首先,还是来普及一下UISearchBar控件API相关的属性和方法吧!
UISearchBar属性相关
_searchBar = [[UISearchBar alloc] initWithFrame:CGRectZero];// 初始化,不解释
[self.searchBar setPlaceholder:@"Search"];// 搜索框的占位符
[self.searchBar setPrompt:@"Prompt"];// 顶部提示文本,相当于控件的Title
[self.searchBar setBarStyle:UIBarMetricsDefault];// 搜索框样式
[self.searchBar setTintColor:[UIColor blackColor]];// 搜索框的颜色,当设置此属性时,barStyle将失效
[self.searchBar setTranslucent:YES];// 设置是否透明
[self.searchBar setBackgroundImage:[UIImageimageNamed:@"image0"]];// 设置背景图片
[self.searchBar setSearchFieldBackgroundImage:[UIImageimageNamed:@"image3"] forState:UIControlStateNormal];// 设置搜索框中文本框的背景
[self.searchBar setSearchFieldBackgroundImage:[UIImageimageNamed:@"image0"] forState:UIControlStateHighlighted];
[self.searchBar setSearchFieldBackgroundPositionAdjustment:UIOffsetMake(30, 30)];// 设置搜索框中文本框的背景的偏移量
[self.searchBar setSearchResultsButtonSelected:NO];// 设置搜索结果按钮是否选中
[self.searchBar setShowsSearchResultsButton:YES];// 是否显示搜索结果按钮
[self.searchBar setSearchTextPositionAdjustment:UIOffsetMake(30,0)];// 设置搜索框中文本框的文本偏移量
[self.searchBar setInputAccessoryView:_btnHide];// 提供一个遮盖视图
[self.searchBar setKeyboardType:UIKeyboardTypeEmailAddress];// 设置键盘样式
// 设置搜索框下边的分栏条
[self.searchBar setShowsScopeBar:YES];// 是否显示分栏条
[self.searchBar setScopeButtonTitles:[NSArrayarrayWithObjects:@"Singer",@"Song",@"Album", nil]];// 分栏条,栏目
[self.searchBar setScopeBarBackgroundImage:[UIImageimageNamed:@"image3"]];// 分栏条的背景颜色
[self.searchBar setSelectedScopeButtonIndex:1];// 分栏条默认选中的按钮的下标
[self.searchBar setShowsBookmarkButton:YES];// 是否显示右侧的“书图标”
[self.searchBar setShowsCancelButton:YES];// 是否显示取消按钮
[self.searchBar setShowsCancelButton:YES animated:YES];
// 是否提供自动修正功能(这个方法一般都不用的)
[self.searchBar setSpellCheckingType:UITextSpellCheckingTypeYes];// 设置自动检查的类型
[self.searchBar setAutocorrectionType:UITextAutocorrectionTypeDefault];// 是否提供自动修正功能,一般设置为UITextAutocorrectionTypeDefault
self.searchBar.delegate = self;// 设置代理
[self.searchBar sizeToFit];
myTableView.contentInset =UIEdgeInsetsMake(CGRectGetHeight(self.searchBar.bounds), 0, 0, 0);
[self.view addSubview:myTableView];
[myTableView addSubview:self.searchBar];
这么多属性,其实看起来多,你实际去操作事件一下,就发现很简单的!
绝大多部分都是定义一些外观的东西!了解了各个属性,一定能满足你设计出你想要的外观效果!!
然后,解释一下,我个人觉的比较有趣和重要的属性!
1.@property (nonatomic, readwrite, retain) UIView *inputAccessoryView;属性
例如:
[self.searchBar setInputAccessoryView:your_View];// 提供一个遮盖视图
当处于UISearchBar焦点状态下(输入框正要输入内容时),会有一个遮盖视图。
你翻看一下,iPhone手机上的电话本搜索功能。那个遮盖视图就是一个半透明的黑色View。
查看了一下API,是iOS 6.0 以及以后,新加入的!
那么就意味这 iOS 6.0 之前的系统是不兼容的。那么怎么才能达到这个类似的效果呢?
变通一下,其实,很简单:仍然设置一个按钮,初始状态下,该UIButton控件透明度设置为0;并且在控件取得焦点时,设置透明度为1。
小技巧:如果要设置这个属性,那么,就最好定义一个UIButton控件,这样,当点击该遮盖层的话,可以利用按钮事件,
设置:[self.searchBar resignFirstResponder];让搜索框放弃第一焦点。(iPhone电话薄也是这么做的,感觉很人性化)。
迷惑:还有一个小的问题:当我让UISearchBar显示取消按钮时,当我让UISearchBar失去焦点时,我的取消按钮也不能点击了。衰啊。
看了一下iPhone电话薄的UISearchBar,竟然可以也,找了很久,都不知道是怎么回事,大概苹果又开始玩私有API了吧。
解决方法:很暴力,但是很好用!在UISearchBar上原来取消按钮的位置上覆盖一个UIButton,设置成一样的。呵呵。可以了。
类似如下:
// 遮盖层
_btnAccessoryView=[[UIButton alloc] initWithFrame:CGRectMake(0, 44,BOUNDS_WIDTH, BOUNDS_HEIGHT)];
[_btnAccessoryView setBackgroundColor:[UIColor blackColor]];
[_btnAccessoryView setAlpha:0.0f];
[_btnAccessoryView addTarget:selfaction:@selector(ClickControlAction:)forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:_btnAccessoryView];
// 遮罩层(按钮)-点击处理事件
- (void) ClickControlAction:(id)sender{
NSLog(@"handleTaps");
[self controlAccessoryView:0];
}
// 控制遮罩层的透明度
- (void)controlAccessoryView:(float)alphaValue{
[UIView animateWithDuration:0.2 animations:^{
//动画代码
[self.btnAccessoryView setAlpha:alphaValue];
}completion:^(BOOL finished){
if (alphaValue<=0) {
[self.searchBar resignFirstResponder];
[self.searchBar setShowsCancelButton:NO animated:YES];
[self.navigationController setNavigationBarHidden:NOanimated:YES];
}
}];
}
2.@property(nonatomic,assign) id<</b>UISearchBarDelegate> delegate;属性
例如:
self.searchBar.delegate = self;
说到这个属性,就是设置委托了。
UISearchBarDelegate委托定义了很多关于,搜索框的一些操作数据的协议方法!
先来个,特写,把x协议的家庭成员列出来:
@protocol UISearchBarDelegate
@optional
- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar;
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar;
- (BOOL)searchBarShouldEndEditing:(UISearchBar *)searchBar;
- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar;
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText;
- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text;
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar;
- (void)searchBarBookmarkButtonClicked:(UISearchBar *)searchBar;
- (void)searchBarCancelButtonClicked:(UISearchBar *) searchBar;
- (void)searchBarResultsListButtonClicked:(UISearchBar *)searchBar;
- (void)searchBar:(UISearchBar *)searchBar selectedScopeButtonIndexDidChange:(NSInteger)selectedScope;
@end
这不需要解释吧,看方法名称就能了解!
我们来看一看,常用的委托方法吧。
#pragma mark - UISearchBarDelegate 协议
// UISearchBar得到焦点并开始编辑时,执行该方法
- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar{
[self.searchBar setShowsCancelButton:YES animated:YES];
[self.navigationController setNavigationBarHidden:YESanimated:YES];
[self controlAccessoryView:0.9];// 显示遮盖层。
return YES;
}
// 取消按钮被按下时,执行的方法
- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar{
[self.searchBar resignFirstResponder];
[self.searchBar setShowsCancelButton:NO animated:YES];
[liveViewAreaTable searchDataBySearchString:nil];// 搜索tableView数据
[self.navigationController setNavigationBarHidden:NOanimated:YES];
[self controlAccessoryView:0];// 隐藏遮盖层。
}
// 键盘中,搜索按钮被按下,执行的方法
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar{
NSLog(@"---%@",searchBar.text);
[self.searchBar resignFirstResponder];// 放弃第一响应者
[liveViewAreaTable searchDataBySearchString:searchBar.text];
[self.navigationController setNavigationBarHidden:NOanimated:YES];
[self controlAccessoryView:0];// 隐藏遮盖层。
}
// 当搜索内容变化时,执行该方法。很有用,可以实现时实搜索
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString*)searchText;{
NSLog(@"textDidChange---%@",searchBar.text);
[liveViewAreaTable searchDataBySearchString:searchBar.text];// 搜索tableView数据
[self controlAccessoryView:0];// 隐藏遮盖层。
}
3.遍历UISearchBar控件的子控件,这样可以针对不同的子视图来设置外观了。
for(id subView in [self.searchBar subviews]){
if([subView isKindOfClass:[UIButton class]]){
UIButton *btn = (UIButton *)subView;
[btn setTitle:@"取消" forState:UIControlStateNormal];
}
}
searchBar控件的更多相关文章
- iOS-UI-UI控件概述
以下列举一些在开发中可能用得上的UI控件: IBAction和IBOutlet,UIView 1 @interface ViewController : UIViewController 2 3 @p ...
- UISearchBar控件-让我们来搞定!(转)
转载自:http://blog.sina.com.cn/s/blog_7b9d64af0101dfg8.html 最近用到搜索功能.于是,经过不断的研究,终于,有点懂了. 那就来总结一下吧,好 ...
- iOS开发——UI进阶篇(十九)UISearchBar控件简介
最近用到搜索功能.总结一下 搜索,无疑可以使用UISearchBar控件! 那就先了解一下UISearchBar控件吧! UISearchBar控件就是要为你完成搜索功能的一个专用控件.它集成了很多你 ...
- IOS—UITextFiled控件详解
IOS—UITextFiled控件详解 //初始化textfield并设置位置及大小 UITextField *text = [[UITextField alloc]initWithFrame:CGR ...
- [iOS基础控件 - 7.0] UIWebView
A.基本使用 1.概念 iOS内置的浏览器控件 Safari浏览器就是通过UIWebView实现的 2.用途:制作简易浏览器 (1)基本请求 创建请求 加载请求 (2)代理监听webView加载, ...
- iOS开发--UIKit控件之UISearchBar(搜索栏)
今天因为需求原因,需要用到搜索控件:之前一直没有用到过这个控件,所以去百度了一下,找到一篇可以说很齐全的资料,感谢这位作者. 然而,我并没有找到可以更改字体大小的属性或方法,希望有知道的告诉我一声,谢 ...
- 【iOS UISearchBar父控件是UIScrollView时,上移的问题】
如果UISearchViewController的父控件是UIScrollView,点击UISearchBar后,它会移出控制器外.如下,使用UIScrollView作为"消息"和 ...
- UISearchBar控件
摘自:http://blog.sina.com.cn/s/blog_7b9d64af0101dfg8.html UISearchBar控件就是要为你完成搜索功能的一个专用控件.它集成了很多你意想不到的 ...
- iOS 搜索框控件 最简单的dome
刚学习搜索框控件,写了个最简单的dome #import <UIKit/UIKit.h> .h @interface ViewController : UIViewController&l ...
随机推荐
- 如何用js实现截取一个字符串中的数字
比如var v ="我要提问1098";var v="我0要提问"var v="我还是要提问987"等我想要里边的 1098 ,0, 987 ...
- DW Basic Knowledge2
DW的元数据是指除去数据本身之外的所有信息. 围绕DBMS方面的元数据可以描述为表定义,分区设置,索引视图定义,以及DBMS级安全方面的特权 与授权等内容. 在任何场合下,ODS要么是一个处在OLTP ...
- zookeeper适用场景:zookeeper解决了哪些问题
问题导读:1.master挂机,传统做法备份必然是以前数据,该如何保证挂机数据与备份数据一致?2.分布式系统如何实现对同一资源的访问,保证数据的强一致性?3.集群中的worker挂了,传统做法是什么? ...
- 矩阵乘法快速幂 codevs 1574 广义斐波那契数列
codevs 1574 广义斐波那契数列 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题目描述 Description 广义的斐波那契数列是指形如 ...
- 最小瓶颈路 Uva 534 Frogger
说明:关于Uva的题目,可以在vjudge上做的,不用到Uva(那个极其慢的)网站去做. 最小瓶颈路:找u到v的一条路径满足最大边权值尽量小 先求最小生成树,然后u到v的路径在树上是唯一的,答案就是这 ...
- 2014 Super Training #2 F The Bridges of Kolsberg --DP
原题:UVA 1172 http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...
- IOS定位服务的应用
IOS定位服务的应用 一.授权的申请与设置 二.定位服务相关方法 三.定位服务代理的相关方法 四.定位服务获取到的位置对象 五.航标定位得到的航标信息对象 IOS定位服务的应用 一.授权的申请与设置 ...
- Spring中使用Quartz
package com.ncs.hj; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; ...
- .Net 内存溢出(System.OutOfMemoryException)的常见情况和处理方式总结
.Net 内存溢出(System.OutOfMemoryException)的常见情况和处理方式总结 在什么情况下会出现OutOfMemonryException呢? 在我们试图新建一个对象时,而垃圾 ...
- 双绞线线序+POE供电网线
0 重点 一般情况下会用1236(橙白.橙.绿白.绿)传输数据,1.2用于发送,3.6用于接收,45(蓝.蓝白)电源正极 78(棕白.棕)电源负极. 一 网线线序 12发 36收 二 poe网线供电 ...