LGLSearchBar
平时我们都是用UITextFeild 来写搜索框, 最近有时间就自己重新封装了UISearchBar, 他可以自行修改里面的属性来达到我们使用的要求。
源代码下载地址:https://github.com/liguoliangiOS/LGLSearchBar.git 欢迎各位下载使用,有问题可以qq联系我 185226139 如果觉得好用请给我点赞,谢谢!
这个使用简单:
#import "LGLSearchBar.h"
LGLSearchBar * searchBar = [[LGLSearchBar alloc] initWithFrame:CGRectMake(10, 200, SCREENWIDTH - 20, 40) searchBarStyle:LGLSearchBarStyleDefault];
[searchBar searchBarTextSearchTextBlock:^(NSString *searchText) {
NSLog(@"%@", searchText);
}];
下面上具体的代码
LGLSearchBar.h
- #import <Foundation/Foundation.h>
- #import <UIKit/UIKit.h>
- typedef void(^SearchTextBlock)(NSString * searchText);
- typedef NS_ENUM(NSUInteger, LGLSearchBarStyle) {
- LGLSearchBarStyleDefault,
- LGLSearchBarStyleProminent,
- LGLSearchBarStyleMinimal
- };
- typedef NS_ENUM(NSInteger, LGLTextBorderStyle) {
- LGLTextBorderStyleNone,
- LGLTextBorderStyleLine,
- LGLTextBorderStyleBezel,
- LGLTextBorderStyleRoundedRect
- };
- @interface LGLSearchBar : UIView
- - (instancetype)initWithFrame:(CGRect)frame searchBarStyle:(LGLSearchBarStyle)style;
- /** 提示文字 */
- @property (nonatomic, copy) NSString * placeholder;
- /** 提示文字的颜色 */
- @property (nonatomic, strong) UIColor * placeholderColor;
- /** 搜索框(输入框除外)的背景颜色 */
- @property (nonatomic, strong) UIColor * barBackgroudColor;
- /** 输入框的背景颜色 */
- @property (nonatomic, strong) UIColor * textBackgroudColor;
- /** 输入文字的颜色文字的颜色 */
- @property (nonatomic, strong) UIColor * textColor;
- /** “搜索“文字的颜色 */
- @property (nonatomic, strong) UIColor * tintColor;
- /** 提示文字的大小 */
- @property (nonatomic, assign) CGFloat placeholderFontSize;
- /** 输入文字的大小 */
- @property (nonatomic, assign) CGFloat textFontSize;
- /** 输入框的风格 */
- @property (nonatomic, assign) LGLTextBorderStyle textBordStyle;
- @property (nonatomic, copy) SearchTextBlock block;
- /** 获得搜索的Text */
- - (void)searchBarTextSearchTextBlock:(SearchTextBlock)block;
- /** 改变里面输入框的 边框宽度 颜色 圆角 */
- - (void)setSearchBarBordeWidth:(CGFloat)Width bordColor:(UIColor *)bordColor bordRadius:(CGFloat)bordcornerRadius;
- /**
- * 修改放大镜的图片
- * @pramas imageName 图片名称
- * @pramas scale 改变图片的大小
- *
- */
- - (void)setSearchBarImage:(NSString *)imageName scale:(CGFloat)scale;
- @end
LGLSearchBar.m
- #import "LGLSearchBar.h"
- @interface LGLSearchBar ()<UISearchBarDelegate>
- {
- UISearchBar * _searchBar;
- }
- @end
- @implementation LGLSearchBar
- /*
- 还需要添加 修改放大镜的图片
- */
- - (instancetype)initWithFrame:(CGRect)frame searchBarStyle:(LGLSearchBarStyle)style {
- self = [super initWithFrame:frame];
- if (self) {
- _searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, frame.size.height)];
- _searchBar.barStyle = (style == LGLSearchBarStyleDefault) ? UISearchBarStyleDefault : ((style == LGLSearchBarStyleProminent) ? UISearchBarStyleProminent : UISearchBarStyleMinimal);
- _searchBar.placeholder = @"请输入搜索内容";
- /*
- UITextAutocapitalizationTypeNone, 除非自己点击大写,否则永不大写
- UITextAutocapitalizationTypeWords, 以单词来区分,每个单词首字母大写
- UITextAutocapitalizationTypeSentences, 以句子来区分
- UITextAutocapitalizationTypeAllCharacters, 所有字母全部大写
- */
- _searchBar.autocapitalizationType = UITextAutocapitalizationTypeNone;
- //这个是透视属性
- //_searchBar.translucent = YES;
- _searchBar.delegate = self;
- [self addSubview:_searchBar];
- }
- return self;
- }
- #pragma mark ==== UITextFeildDElegate =======
- // return NO to not resign first responder
- - (BOOL)searchBarShouldEndEditing:(UISearchBar *)searchBar {
- return YES;
- }
- // called when keyboard search button pressed
- - (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
- self.block(searchBar.text);
- searchBar.text = nil;
- [searchBar resignFirstResponder];
- }
- // called when cancel button pressed
- - (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar {
- self.block(searchBar.text);
- searchBar.text = nil;
- [searchBar resignFirstResponder];
- }
- // 重新设置 searchbar cancel按钮 为搜索
- - (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar{
- searchBar.showsCancelButton = YES;
- for(UIView *view in [[[searchBar subviews] objectAtIndex:0] subviews]) {
- if([view isKindOfClass:[NSClassFromString(@"UINavigationButton") class]]) {
- UIButton * cancel =(UIButton *)view;
- [cancel setTitle:@"搜索" forState:UIControlStateNormal];
- cancel.titleLabel.font = [UIFont systemFontOfSize:14];
- }
- }
- }
- #pragma mark ==== 重写set方法 ===============
- - (void)setPlaceholderFontSize:(CGFloat )placeholderFontSize {
- _placeholderFontSize = placeholderFontSize;
- [[self searchBarTextFeild] setValue:[UIFont systemFontOfSize:placeholderFontSize] forKeyPath:@"_placeholderLabel.font"];
- }
- - (void)setTextFontSize:(CGFloat)textFontSize {
- _textFontSize = textFontSize;
- [self searchBarTextFeild].font = [UIFont systemFontOfSize:textFontSize];
- }
- - (void)setPlaceholder:(NSString *)placeholder {
- _placeholder = placeholder;
- _searchBar.placeholder = placeholder;
- }
- - (void)setTintColor:(UIColor *)tintColor {
- _tintColor = tintColor;
- _searchBar.tintColor = tintColor;
- }
- - (void)setBarBackgroudColor:(UIColor *)barBackgroudColor {
- _barBackgroudColor = barBackgroudColor;
- _searchBar.barTintColor = barBackgroudColor;
- }
- - (void)setTextBackgroudColor:(UIColor *)textBackgroudColor {
- _textBackgroudColor = textBackgroudColor;
- [[[_searchBar.subviews firstObject]subviews]lastObject].backgroundColor = textBackgroudColor;
- }
- - (void)setPlaceholderColor:(UIColor *)placeholderColor {
- _placeholderColor = placeholderColor;
- [[self searchBarTextFeild] setValue:placeholderColor forKeyPath:@"_placeholderLabel.textColor"];
- }
- - (void)setTextColor:(UIColor *)textColor {
- _textColor = textColor;
- [self searchBarTextFeild].textColor = textColor;
- }
- - (void)setSearchBarImage:(NSString *)imageName scale:(CGFloat)scale {
- UIImageView * leftView = [[UIImageView alloc] initWithImage:[self changeImageSize:imageName scale:scale]];
- [self searchBarTextFeild].leftView = leftView;
- }
- - (void)setTextBordStyle:(LGLTextBorderStyle)textBordStyle {
- _textBordStyle = textBordStyle;
- UITextBorderStyle bordStyle = (textBordStyle == LGLTextBorderStyleNone) ? UITextBorderStyleNone : ((textBordStyle == LGLTextBorderStyleLine) ? UITextBorderStyleLine : ((textBordStyle == LGLTextBorderStyleBezel) ? UITextBorderStyleBezel : UITextBorderStyleRoundedRect));
- [self searchBarTextFeild].borderStyle = bordStyle;
- }
- - (void)setSearchBarBordeWidth:(CGFloat)Width bordColor:(UIColor *)bordColor bordRadius:(CGFloat)bordcornerRadius {
- UITextField * texFeiled = [self searchBarTextFeild];
- texFeiled.layer.borderWidth = Width;
- texFeiled.layer.borderColor = bordColor.CGColor;
- texFeiled.layer.masksToBounds = YES;
- texFeiled.layer.cornerRadius = bordcornerRadius;
- }
- - (void)searchBarTextSearchTextBlock:(SearchTextBlock)block {
- self.block = block;
- }
- // 修改图片的大小
- - (UIImage *)changeImageSize:(NSString *)imageName scale:(CGFloat)scale
- {
- NSData *imgData = UIImagePNGRepresentation([UIImage imageNamed:imageName]);
- UIImage * image = [UIImage imageWithData:imgData scale:scale];
- //声明使用自定义的图片
- image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
- return image;
- }
- //获取输入框
- - (UITextField *)searchBarTextFeild {
- UITextField * texFeild = nil;
- for (UIView* subview in [[_searchBar.subviews lastObject] subviews]) {
- if ([subview isKindOfClass:[UITextField class]]) {
- texFeild = (UITextField*)subview;
- } else if ([subview isKindOfClass:NSClassFromString(@"UISearchBarBackground")])
- {
- [subview removeFromSuperview];
- }
- }
- return texFeild;
- }
- @end
感谢大家的支持!
LGLSearchBar的更多相关文章
随机推荐
- LoadRunner11.52发布,全新的VTS
LoadRunner11.52发布,全新的VTShttp://automationqa.com/forum.php?mod=viewthread&tid=2252&fromuid=2 ...
- POJ 1816 Wild Words
Wild Words Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 4412 Accepted: 1149 Descri ...
- IIS7/IIS7.5 二级域名伪静态设置方法
转载地址:http://www.admin5.com/article/20120107/402582.shtml
- python网站收集
1.python核心编程 习题答案 http://www.cnblogs.com/balian/category/279009.html 2.编程语言入门经典100例(python版) htt ...
- CCF推荐国际学术会议
类别如下计算机系统与高性能计算,计算机网络,网络与信息安全,软件工程,系统软件与程序设计语言,数据库.数据挖掘与内容检索,计算机科学理论,计算机图形学与多媒体,人工智能与模式识别,人机交互与普适计算, ...
- xfire框架内部基本结构解析
1 概述 xfire是webservice的一个实现框架,是apache旗下CXF的前身,是一个比较被广泛使用的webservice框架,网上有很多关于如何使用xfire或cxf的hello worl ...
- wow 各职业体验(pvp)
玩过职业 近战 武器战,冰DK,惩戒骑,增强萨,踏风 法系远程 鸟德,痛苦术,火法,奥法 治疗 奶德,奶骑,奶萨 三板甲职业就冰DK 最轻松,增强萨操作最频繁 机动性最好就武器战,踏风最差的,踏风群攻 ...
- VS2008简体中文正式版序列号-试用到期解决
VS2008简体中文正式版序列号 VS2008简体中文正式版序列号 1.Visual Studio 2008 Professional Edition:XMQ2Y-4T3V6-XJ48Y-D3K2V- ...
- WCF小白初试 错误之一:“有零个应用程序终结点”的解决办法
遇到这类问题 应该是配置文件出现了问题 解决办法是将配置文件中的<service name="命名空间+类名">就可以解决
- mysql 线上not in查询中的一个坑
今天早上开发又过来说,怎么有个语句一直没有查询出结果,数据是有的呀,并发来了如下的sql(为了方法说明,表名及查询均做了修改): select * from t2 where t2.course no ...