iOS一个简单的自定义searchBar
2017-08-17 本文已影响30人
雪_晟
每个项目都是不同的搜索框,放一个。
searchBar.gif@interface LXCardSearchView : UIView
-(void)resetStatus;
@property(nonatomic,copy)void (^searchCompleteBlock)(NSString *text);//搜索完成的回调
@property(nonatomic,copy)void (^returnBlock)(); //左侧返回键
@property(nonatomic,copy)void (^selectBlock)(LxButton *button);//右侧文字为筛选的点击回调
@end
#import "LXCardSearchView.h"
#define Cornerdious 15.5
@interface LXCardSearchView ()<UITextFieldDelegate>
@property(nonatomic,strong)LxButton *rightBtn;
@property(nonatomic,strong)LxButton *leftBtn;
@property(nonatomic,strong)UIView *centerView;
@property(nonatomic,strong)FTTextField *textField;
@property(nonatomic,strong)UIView *leftView;
@property(nonatomic,strong)UIImageView *searchImageview;
@property(nonatomic,strong)UILabel *noticeLabel;
@end
@implementation LXCardSearchView
-(instancetype)init{
self = [super init];
if (self) {
[self setup];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(gosave:) name:UITextFieldTextDidEndEditingNotification object:nil];
[self btnAction];
}
return self;
}
-(void)btnAction{
NCWS(weakSelf);
[self.leftBtn addClickBlock:^(UIButton *button) {
if (weakSelf.returnBlock) {
weakSelf.returnBlock();
}
}];
[self.rightBtn addClickBlock:^(UIButton *button) {
if (button.selected) {
[weakSelf resetStatus];
}else{
if (weakSelf.selectBlock) {
weakSelf.selectBlock(weakSelf.rightBtn);
}
}
}];
}
-(void)gosave:(NSNotification *)noti{
FTTextField * textField = noti.object;
if (textField.text.length >0) {
if (self.searchCompleteBlock) {
self.searchCompleteBlock(textField.text);
}
}
}
-(BOOL)textFieldShouldReturn:(UITextField *)textField{
[textField resignFirstResponder];
return YES;
}
-(void)setup{
[self sd_addSubviews:@[self.leftBtn,self.centerView,self.rightBtn]];
[self.centerView sd_addSubviews:@[self.leftView,self.textField]];
[self.leftView sd_addSubviews:@[self.noticeLabel,self.searchImageview]];
self.leftBtn.sd_layout
.leftSpaceToView(self, 16)
.centerYEqualToView(self)
.widthIs(10)
.heightIs(17);
self.rightBtn.sd_layout
.rightSpaceToView(self, 16)
.centerYEqualToView(self);
[self.rightBtn setupAutoSizeWithHorizontalPadding:10 buttonHeight:31];
self.centerView.sd_layout
.leftSpaceToView(self.leftBtn, 16)
.rightSpaceToView(self.rightBtn, 16)
.centerYEqualToView(self)
.heightRatioToView(self, 1);
self.centerView.sd_cornerRadius = [NSNumber numberWithFloat:Cornerdious];
self.leftView.sd_layout
.leftSpaceToView(self.centerView, Cornerdious)
.heightRatioToView(self.centerView, 1)
.topEqualToView(self.centerView)
.widthIs(20);
self.textField.sd_layout
.leftSpaceToView(self.leftView, 0)
.rightEqualToView(self.centerView)
.topEqualToView(self.centerView)
.heightRatioToView(self.centerView, 1);
self.noticeLabel.sd_layout.spaceToSuperView(UIEdgeInsetsMake(0, 0, 0, 0));
self.searchImageview.sd_layout
.leftEqualToView(self.leftView)
.centerYEqualToView(self.leftView)
.widthIs(15)
.heightIs(15);
}
-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
self.rightBtn.selected = YES;
self.noticeLabel.hidden = NO;
self.searchImageview.hidden = YES;
[UIView animateWithDuration:0.25 animations:^{
self.leftView.sd_layout.widthIs(40);
self.leftBtn.sd_layout.leftSpaceToView(self, 0).widthIs(0.01);
[self.centerView updateLayout];
[self updateLayout];
}];
return YES;
}
-(void)resetStatus{
[UIView animateWithDuration:0.25 animations:^{
self.leftView.sd_layout.widthIs(20);
self.leftBtn.sd_layout.leftSpaceToView(self, 16).widthIs(10);
[self.centerView updateLayout];
[self updateLayout];
}];
self.noticeLabel.hidden = YES;
self.searchImageview.hidden = NO;
self.rightBtn.selected = NO;
}
-(LxButton *)rightBtn{
if (!_rightBtn) {
_rightBtn =[LxButton LXButtonNoFrameWithTitle:@"筛选" titleFont:Font(16) Image:nil backgroundImage:nil backgroundColor:[UIColor whiteColor] titleColor:[UIColor hexStringToColor:@"3c3c3c"]];
[_rightBtn setTitle:@"取消" forState:UIControlStateSelected];
}
return _rightBtn;
}
-(LxButton *)leftBtn{
if (!_leftBtn) {
_leftBtn =[LxButton LXButtonNoFrameWithTitle:@"" titleFont:Font(16) Image:[UIImage imageNamed:@"icon_fanhui"] backgroundImage:nil backgroundColor:nil titleColor:nil];
}
return _leftBtn;
}
-(UIView *)centerView{
if (!_centerView) {
_centerView =[[UIView alloc]init];
_centerView.backgroundColor =[UIColor hexStringToColor:@"#f4f4f4"];
}
return _centerView;
}
-(FTTextField *)textField{
if (!_textField) {
_textField =[[FTTextField alloc]init];
_textField.borderStyle = 0;
_textField.placeholder = @"关键字";
_textField.delegate = self;
_textField.returnKeyType = UIReturnKeySearch;
}
return _textField;
}
-(UIView *)leftView{
if (!_leftView) {
_leftView =[[UIView alloc]init];
// _leftView.backgroundColor =[UIColor blueColor];
}
return _leftView;
}
-(UILabel *)noticeLabel{
if (!_noticeLabel) {
_noticeLabel =[UILabel LXLabelWithTextNoFrame:@"商品" textColor:[UIColor hexStringToColor:@"3c3c3c"] backgroundColor:[UIColor clearColor] font:Font(15) textAlignment:NSTextAlignmentCenter];
_noticeLabel.hidden = YES;
}
return _noticeLabel;
}
-(UIImageView *)searchImageview{
if (!_searchImageview) {
_searchImageview =[[UIImageView alloc]init];
_searchImageview.image =[UIImage imageNamed:@"icon_sou_suo"];
}
return _searchImageview;
}
@end
使用方法
#import "NextController.h"
#import "LXCardSearchView.h"
@interface NextController ()
@property(nonatomic,strong)LXCardSearchView *cardSeachView;
@property(nonatomic,strong)UIView *navView;
@end
@implementation NextController
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:YES animated:YES];
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.view.backgroundColor =[UIColor whiteColor];
[self.view addSubview:self.navView];
self.cardSeachView =[[LXCardSearchView alloc]init];
[self.navView addSubview:self.cardSeachView];
self.cardSeachView.backgroundColor =[UIColor whiteColor];
self.cardSeachView.sd_layout
.leftEqualToView(self.navView)
.rightEqualToView(self.navView)
.bottomSpaceToView(self.navView, 10)
.heightIs(31);
self.cardSeachView.searchCompleteBlock = ^(NSString *text) {
NSLog(@"%@",text);
};
NCWS(weakSelf);
self.cardSeachView.selectBlock = ^(LxButton *button) {
UIViewController *vc =[[UIViewController alloc]init];
vc.view.backgroundColor = LBRandomColor;
[weakSelf.navigationController pushViewController:vc animated:YES];
};
self.cardSeachView.returnBlock = ^{
[weakSelf.navigationController popViewControllerAnimated:YES];
};
}
-(void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
[self.navigationController setNavigationBarHidden:NO animated:YES];
}
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
[self.view endEditing:YES];
[self.cardSeachView resetStatus];
}
-(UIView *)navView{
if (!_navView) {
_navView =[[UIView alloc]initWithFrame:CGRectMake(0, 0, Device_Width, 64)];
_navView.backgroundColor =[UIColor whiteColor];
}
return _navView;
}
@end
demo 地址 搜索框