iOS 自定义searchBar(搜索框)

作者: devchena | 来源:发表于2015-10-15 11:30 被阅读16649次

在项目中使用到搜索框,我们首先想到的是使用系统控件UISearchBar,但是UISearchBar有时候达不到想要的效果,这个时候就需要自定义searchBar了。

搜索框,顾名思义在框中输入关键字查找内容,这里可以替代UISearchBar的可选控件有两个:UITextField和UITextView。

在下面的自定义搜索框中选择以UITextField为例,废话不多说,直接上代码:

MTSearchBar

.h文件

#import <UIKit/UIKit.h>

@interface MTSearchBar : UITextField

+ (instancetype)searchBar;

@end

.m文件

#import "MTSearchBar.h"

@implementation MTSearchBar

- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        self.size = CGSizeMake(300, 30);
        self.font = [UIFont systemFontOfSize:15];
        self.placeholder = @"请输入查询条件";
        // 提前在Xcode上设置图片中间拉伸
        self.background = [UIImage imageNamed:@"searchbar_textfield_background"];
        
        // 通过init初始化的控件大多都没有尺寸
        UIImageView *searchIcon = [[UIImageView alloc] init];
        searchIcon.image = [UIImage imageNamed:@"searchbar_textfield_search_icon"];
        // contentMode:default is UIViewContentModeScaleToFill,要设置为UIViewContentModeCenter:使图片居中,防止图片填充整个imageView
        searchIcon.contentMode = UIViewContentModeCenter;
        searchIcon.size = CGSizeMake(30, 30);
        
        self.leftView = searchIcon;
        self.leftViewMode = UITextFieldViewModeAlways;
    }
    return self;
}

+(instancetype)searchBar
{
    return [[self alloc] init];
}


@end

添加searchBar到navigationBar

- (void)viewDidLoad {
    [super viewDidLoad];

    //设置navigationBar的中间为searchBar
    self.navigationItem.titleView = [MTSearchBar searchBar];
}


模拟器运行效果图:



上面的示例代码仅供参考,更多功能请自定义实现!

参考Demo下载:http://pan.baidu.com/s/1pLvNDwv

相关文章

网友评论

  • 蒋昉霖:如何修改默认字体改为自定义字体
    King_mr:mouthL.font= [UIFont fontWithName:@"PingFangTC-Light" size:11];//PingFangTC-Light字体名 你说的是这样吗
  • brance:楼主 我觉得可以将这个类方法 self.navigationItem.titleView = [ZTSearchBar searchBar]; 改为
    self.navigationItem.titleView = [[ZTSearchBar alloc]initWithFrame:CGRectMake(0, 0, 200, 30)];,然后在 initWithFrame 方法里面 self.size = CGSizeMake(300, 30);改为 self.frame = frame;是不是灵活一点呢?
    devchena:@Brance 简单一点的,可以在搜索框后面加个UIImageView,然后设置背景图就可以了
    brance:@devchen 客气了,我还是用的你的搜索框,只不过改了一点点,还想请教一下楼主,设置搜索框背景图片的正确姿势~
    devchena:@Brance :smiley: 是的,谢谢啦
  • Hither:请问 为什么我放到导航栏上后 宽度没有像你的那样自适应 这是为什么?
    Hither:@devchen 如果我设置成宽度400 就自适应 300 就不能只适应
    devchena:@秀逗麻得 会有这么个bug,我自定义view如果宽度大于一定值会是view不居中
  • devchena:这个你可以自定义布局
  • 214c90ea01be:为什么我的拉伸效果不一样,两边有阴影,怎样把站位文字放在搜索框中间
  • 翀鹰精灵:代码下载地址呢?链接呢?
    翀鹰精灵:@devchen 谢谢啦!
    devchena:@翀鹰女孩 http://pan.baidu.com/s/1pLvNDwv
  • 翀鹰精灵:代码下载地址呢?链接呢?
  • 翀鹰精灵:代码下载地址呢?
  • 翀鹰精灵:代码下载地址呢?
  • 翀鹰精灵:代码下载地址呢?
  • 7emini:笔者不真心, 代码链接都没贴出来, 哼. :angry:
    7emini:@devchen :eyes:了解了
    devchena:@SunnyPig 有链接了
    devchena:@SunnyPig :joy:
  • Hiker5:想问问,那两个图片,有素材么?
    devchena:@Hiker5 素材好像是在项目用的,你可以随便找张试试。重要的是这句代码self.navigationItem.titleView = 你自定义的view
  • 微光星芒:后面的代码呢?
  • 8ae158dda3f2:类似淘宝首页的搜索框是怎么实现的,能不能谈谈思路,是不是放了一个按钮,点击跳转搜索界面。
    devchena: @_NevinZ 嗯嗯,可以这样,UI效果符合产品设计应该没问题
    8ae158dda3f2:嗯,我先问的是电商类的首页搜索,那里是不是放的按钮,点击之后跳转界面,跳转后的界面的搜索栏用textfield做,是不是这样?
    devchena: @_NevinZ 搜索框可以用textField去做,通过代理事件可以更好实现

本文标题:iOS 自定义searchBar(搜索框)

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