美文网首页
UITextField字数限制

UITextField字数限制

作者: LK83 | 来源:发表于2019-06-14 16:20 被阅读0次

    前言

    UITextField、UITextView字数输入限制相信是大多数朋友项目开发中都会遇到的基本需求,网上的解决方案也挺多的,有采用Delegate的也有添加采用监听的方式。一开始小编也采用监听的方式,后面发现代码看起来嫉妒不简洁,使用起来也比较麻烦,所以进行了优化。下面先介绍一开始采用的方式以及优化的过程,着急的盆友可以直接到查看文末,也可以下载优化后的文件哦~

    监听方式

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldDidChange:) name:UITextFieldTextDidChangeNotification object:self.verificationTF];
    
    - (void) textFieldDidChange:(NSNotification *)notification {
    // 处理字数限制  
    }
    

    以这种的话就得在需要字数限制的地方都得加上以上的监听和实现,所以是十分繁琐。

    分类方式

    经过一番思考之后采用了分类+Runtime的方法。具体实现如下:

    • 给分类添加最长字数和编辑代理回调的属性
    typedef void(^UITextFieldLimitBlock)(void);
    
    // 编辑代理回调
    @property (nonatomic, copy) UITextFieldLimitBlock limitBlock;
    
    /// 最长字数
    @property (nonatomic, assign) int maxLength;
    
    • 添加两个调用方法
    /**
     字数限制-不自动裁剪
    
     @param limitBlock UITextFieldLimitBlock
     */
    - (void)lengthLimit:(UITextFieldLimitBlock)limitBlock;
    
    /**
     字数限制-自动裁剪
    
     @param maxLength 最大长度
     @param limitBlock UITextFieldLimitBlock
     */
    - (void)lengthLimitWithMaxLength:(int)maxLength limitBlock:(UITextFieldLimitBlock)limitBlock;
    
    
    • 利用Runtime给分类关联对象
    - (void)setLimitBlock:(UITextFieldLimitBlock)limitBlock
    {
        objc_setAssociatedObject(self, &limit, limitBlock, OBJC_ASSOCIATION_COPY);
    }
    
    - (UITextFieldLimitBlock)limitBlock
    {
        return objc_getAssociatedObject(self, &limit);
    }
    
    - (void)setMaxLength:(int)maxLength
    {
        objc_setAssociatedObject(self, &length, @(maxLength), OBJC_ASSOCIATION_COPY);
    }
    
    - (int)maxLength
    {
        NSNumber *maxLength = objc_getAssociatedObject(self, &length);
        return [maxLength intValue];
    }
    
    • 调用方法如下
    [self.textField lengthLimit:^{
    // 处理字数改变        
    }];
    

    Runtime真是个大宝贝,有何疑问或是有更好方法的盆友欢迎下方评论交流哦~
    Demo地址:UITextField-Expand 喜欢的盆友可以给颗小星星哦~

    相关文章

      网友评论

          本文标题:UITextField字数限制

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