第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

IOS輸入框的實(shí)時(shí)驗(yàn)證

標(biāo)簽:
Html5

实时验证与结束验证是有区别的,它们的约束规则不也不一样,准备来说:结果验证的约束规则是实时验证的约束规则的一个特例;
如:一个输入框有如下的字符要求:输入字符为5位数字;这是一个结果验证的约束,但是在输入验证时,我们必须允许字符个数小于5个;
所以实时验证要比结束验证麻烦一些!

实时验证UITextField和UITextView中的内容有两种方案:

  1. 通过响应式编程,需要用响应工编程框架,如:RxSwift;

  2. 实现UITextField和UITextView的代理方法,在该代理方法中测试每一次的输入;

由于由于UITextField和UITextView的实时验证是经常被用到的,并且若想通过代理方法实现一个完美且全面的实时验证是需要久经测试和修改的,为了避免每次都要重新思考和设计,我就把记录在此;

因为要实时验证输入字符,所以需要在以下方法中验证:
UITextFieldDelegate:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;

UITextViewDelegate:

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text;

因为UITextField和UITextView的输入变化的代理方法一样,所以对UITextField和UITextView和实时验证的代码逻辑是完全一样的,只需要更改变个别变量名字即可,本篇就以UITextField为例进行详解,具体逻辑如下:

//假设有多个输入框需要进行实时验证,则分别定义它们的tag值;#define Tag_TF1    101     //输入框的tag#define Tag_TF2    102     //输入框的tag#define MaxLength   10      //输入字符允许的最大长度- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {    
    //生成改变后的字符串
    NSMutableString * text = [NSMutableString stringWithString:textField.text];
    [text replaceCharactersInRange:range withString:string];    
    if (text.length == 0) {        //允许清空字符串
        return YES;
    }    
    BOOL shouldChange = YES;    //用于保存是否允许此次改变
    
    switch (textField.tag) {        case Tag_TF1:      //被检查的输UITextField的tag
        {//判断最大长度和正则:用于需要限制长度 且 正则中描述不了长度 的情况
            
            shouldChange = text.length <= MaxLength;   //判断最大长度
            if (shouldChange) {                //用正则表达式来验证是否符合模式要求;
                // matchesRegEx:方法是我给NSString类扩展的一方法,用来验证字符是否符合正则表达式的,它的具体实现会在下面给出;
                shouldChange = [text matchesRegEx:RegEx_1];  
            }
        }            
            break;            
        case Tag_TF2:
        {//仅判断正则:用于不限制长度 或者 正则里能描述长度 的情况
            shouldChange = [text matchesRegEx:RegEx_2];   //判断正则
        }            break;            
        default:            break;
    }    
    
    return shouldChange;
}

上段代码中NSString的扩展方法matchesRegEx:的具体实现如下:

NSString(BYExtension).m文件

/**
 测试并返回是接收者是否匹配指定的正则表达式
 备注:不能匹配空字符串
 @param regEx 正则表达式
 @return 是否匹配指定的正则表达式
 */-(BOOL)matchesRegEx:(NSString *)regEx {    NSRange matchesRange = [self rangeOfString:regEx options:NSRegularExpressionSearch];    return matchesRange.length > 0;



作者:科研者
链接:https://www.jianshu.com/p/00b1ca9d0987


點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消