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的更多相关文章
随机推荐
- 使用Xcode6.1.1打包出现Your account already has a valid iOS Distribution certificate问题
1.问题描述: 使用客户证书在Xcode6.1.1上进行打包测试,出现如下问题,查看网上也很多类似错误且解决办法各异. 2.我的解决办法: 让客户将开发.发布证书重新revoke掉之后重新创新并给到p ...
- Android中GridView使用总结
1.http://blog.csdn.net/hellogv/article/details/4567095 基础篇,GridView最基本的用法 2.http://my.eoe.cn/cainia ...
- MSIL解析一(转)
转自:http://www.cnblogs.com/Yahong111/archive/2007/08/15/857140.html 在网上发现了一个非常好的MSIL教程,可惜是英文版的,于是就翻译了 ...
- Fire!(BFS)
Fire! Time Limit:1000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Submit Status Descr ...
- 如何交换两个等长整形数组使其数组和的差最小(C和java实现)
1. 问题描述: 有两个数组a,b,大小都为n,数组元素的值任意整形数,无序: 要求:通过交换a,b中的元素,使[数组a元素的和]与[数组b元素的和]之间的差最小. 2. 求解思路: 当前数组a和数组 ...
- Android中使用POI加载与显示word文档
最近打算实现一个功能:在Android中加载显示Word文档,当然这里不是使用外部程序打开.查看一些资料后,打算采用poi实现,确定了以下实现思路: 将ftp中的word文档下载到本地. 调用poi将 ...
- 关于C# Math 处理奇进偶不进
话说,最近一次系统维护 用JS读取导入Excel中的实验数据,出现被自动四舍五入.后来到客户现场听客户反馈 Excel实验数据要求 奇进偶不进. 关于 奇进偶不进 产生的由来:从统计学的角度,“奇进 ...
- VIM配置相关记录
把一直使用中的vim配置做个GIT入库管理,也把之前积累在机器上的文档,做个汇总. https://github.com/wujuguang/kyvim 1. 安装完整版vim vi和vim的区别?在 ...
- CentOS下安装JDK7 转载
转载地址:http://www.cnblogs.com/rilley/archive/2012/02/02/2335395.html CentOS下安装JDK7 下载地址:http://www.ora ...
- IEE数据库kill指定条件的进程
需求:IEE数据库临时需要添加一个监控,将command为sleep,time>1800,info为null的进程自动杀掉. 1.杀进程脚本ieekill.sh内容如下 #!/bin/bash ...