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