zoukankan      html  css  js  c++  java
  • 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
    

     感谢大家的支持!

    有兴趣的可以加入QQ群:457236811
  • 相关阅读:
    9
    8
    7
    lua开发和调试环境
    MeshFilter mesh vs sharedMesh
    几种方法验证unity是否为development build
    Unity SetActive Event
    利用Data Vault对数据仓库进行建模(二)
    程序员如何圆飞行梦想(一)
    利用Data vault对数据仓库建模
  • 原文地址:https://www.cnblogs.com/ljmaque/p/LGLSearchBar.html
Copyright © 2011-2022 走看看