把UISearchBar改造成你想要的样子

作者: 十六月 | 来源:发表于2016-08-15 12:20 被阅读1768次

产品要求,如下图,在不触发UISearchBar的情况下
1.默认的提示文字居左

2.删除按钮默认显示,且样式要替换

3.取消按钮显示

4.输入光标距最左边指定间隔

5.隐藏放大镜图标

搜索框.png
- (void)addSearchBarView {
UIView *searchBgView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, 75.f)];

searchBgView.backgroundColor = [UIColor whiteColor];

[self.view addSubview:searchBgView];

UISearchBar *searchBarView = [[UISearchBar alloc] initWithFrame:CGRectMake(8.f, 27.f,SCREEN_WIDTH-58.f, 44.f)];

//光标颜色
searchBarView.tintColor = [UIColor grayColor];

[searchBarView setBackgroundImage:[UIImage imageNamed:@"clear_bg"]];

//背景图片
[searchBarView setSearchFieldBackgroundImage:[UIImage imageNamed:@"searchFiledBg"] forState:UIControlStateNormal];

//输入光标左边距
[searchBarView setSearchTextPositionAdjustment: UIOffsetMake(10, 0)];

searchBarView.delegate = self;

self.searchBarView = searchBarView;

//隐藏放大镜图标
UITextField *txfSearchField = [searchBarView valueForKey:@"_searchField"];

[txfSearchField setLeftViewMode:UITextFieldViewModeNever];

//自定义取消按钮
UIButton *cancelBtn = [[UIButton alloc] initWithFrame:CGRectMake(SCREEN_WIDTH-57.f, CGRectGetMinY(searchBarView.frame), 57.f, 44.f)];

[cancelBtn setTitle:@"取消" forState:UIControlStateNormal];

cancelBtn.titleLabel.font = [UIFont CFRegular:14.f];

[cancelBtn setTitleColor:RGBSame(28) forState:UIControlStateNormal];

[cancelBtn addTarget:self action:@selector(cancelSearch) forControlEvents:UIControlEventTouchUpInside];

//自定义placeholder text
UILabel *label = [UILabel new];

label.frame = CGRectMake(18, 8, 200, 28);

label.text = @"搜索Fashionista和文章";

label.font = [UIFont CFRegular:14];

label.textColor = HBGrayColor;

[searchBarView addSubview:label];

self.placeHolderLbl = label;

[searchBgView addSubview:searchBarView];

[searchBgView addSubview:cancelBtn];}

下一步就是显示删除按钮了,注意要在viewDidAppear方法里操作,遍历UISearchBar的子视图找到searchField,自定义searchField.rightView,然后searchField.rightViewMode = UITextFieldViewModeAlways;将默认的清除按钮状态设为searchField.clearButtonMode = UITextFieldViewModeNever;代码详情如下:

- (void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
for(UIView *subView in self.searchBarView.subviews.firstObject.subviews) {
    if([subView isKindOfClass: [UITextField class]]){
        UITextField *searchField = (UITextField *)subView;
        CGFloat myWidth = 26.0f;
        CGFloat myHeight = 30.0f;
        UIButton *myButton = [[UIButton alloc] initWithFrame:CGRectMake(0.0f, 0.0f, myWidth, myHeight)];
        [myButton setImage:[UIImage imageNamed:@"icon_delete_search_normal"] forState:UIControlStateNormal];
        [myButton setImage:[UIImage imageNamed:@"icon_delete_search_normal"] forState:UIControlStateHighlighted];
        [myButton addTarget:self action:@selector(clearsearchbar) forControlEvents:UIControlEventTouchUpInside];
        searchField.rightView = myButton;
        searchField.rightViewMode = UITextFieldViewModeAlways;
        searchField.clearButtonMode = UITextFieldViewModeNever;
    }
} }

当然要记得在触发UISearchBar时隐藏自定义的Placeholder,并按照自己的需求去实现删除和取消按钮的触发方法,下面是我的实现
- (void)clearsearchbar {
_searchBarView.text = nil;
self.placeHolderLbl.hidden = NO;
[_searchBarView resignFirstResponder];}

- (void)cancelSearch {
[_searchBarView resignFirstResponder];
[self.navigationController popViewControllerAnimated:YES];}

相关文章

  • 把UISearchBar改造成你想要的样子

    产品要求,如下图,在不触发UISearchBar的情况下1.默认的提示文字居左 2.删除按钮默认显示,且样式要替换...

  • 直接设置UISearchBar为tableView的tableH

    而我想要的效果UISearchBar要对称显示,如下图: 解决方法:把UISearchBar加在一个UIView上...

  • 把“家”营造成我们想要的样子

    看过一个情感类的综艺节目,情节是:男女主角一上场就“刀光剑影”的,彼此的缺点“你来我往”的禅述得淋漓尽致。男...

  • 终于把书桌改造成了想要的样子

    书桌是宜家的,120*60 这个尺寸堪称完美,足够放下我的电脑、iPad以及小书架,上面放着这个月常看的几本纸质书...

  • 适配iOS 13填坑

    使用苹果私有API 获取UISearchBar的_searchField对象 改UITextField的place...

  • 微信台词

    1,[拳头]教育 [月亮]不是把孩子 [跳跳]塑造成你想要的样子 而是帮助孩子 [玫瑰]把他的优点 [太阳]他喜欢...

  • 自恋者与镜子

    那个夜晚,我生下了你 我是那么的爱你 我让你悲伤,让你欢乐 也让你哭泣,也让你微笑 我竭力把你打造成我想要的样子 ...

  • 1126-2018《亲密关系》听书笔记

    人们常常结婚后才发现爱人不是自己想要的模样,开始想要改造成自己想要的模样,结果处处碰壁!如果你接受伴侣本来的样子,...

  • 主动学习

    爱一个人要接受他本来的样子,而不是把他改造成自己想要的样子。父母如果无意识把自己的期望投射到孩子身上,就会把...

  • 不要妄想等一个人长大

    女孩子总是爱天真,傻傻的认为,可以把对方打造成自己喜欢的样子。但一个人的本性是很难改的,那是从小就养成的你妄想着他...

网友评论

本文标题:把UISearchBar改造成你想要的样子

本文链接:https://www.haomeiwen.com/subject/bwjusttx.html