UITextFiled 限制位數(shù)限制中英文的那些事

  • 限制只能輸入數(shù)字并且限制輸入位數(shù).要先實(shí)現(xiàn)限制自能輸入0-9 的數(shù)字的方法. 如果只在textfiled設(shè)置彈出鍵盤是數(shù)字鍵盤的話第三方輸入法還是能輸入數(shù)字之外的字符

實(shí)現(xiàn)限制只能輸入數(shù)字的方法

 *  限制textfiled只能輸入0-9數(shù)字
 *
 *  @param number string
 *
 *  @return YES/NO
 */
- (BOOL)validateNumber:(NSString*)number {
    
    BOOL res = YES;
    
    NSCharacterSet* tmpSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];
    int i = 0;
    while (i < number.length) {
        NSString * string = [number substringWithRange:NSMakeRange(i, 1)];
        NSRange range = [string rangeOfCharacterFromSet:tmpSet];
        if (range.length == 0) {
            res = NO;
            break;
        }
        i++;
    }
    return res;
}

實(shí)現(xiàn)UITextFiledelegate方法,調(diào)用只能輸入數(shù)字的方法.并限制其位數(shù)**

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    
    if (range.location >= 2){ //限制位數(shù).
       
        return NO;
    }else{//限制只能輸入數(shù)字
        
        return [self validateNumber:string];
    }
  

}
  • 限制實(shí)現(xiàn)中文兩個(gè)字符. 英文占一個(gè)字符. 如限制英文輸入只能18個(gè),那中文只能輸入9個(gè)

監(jiān)聽(tīng)通知textfiled正在didchange的通知**

   //添加監(jiān)聽(tīng)textFile文字 改變的通知
    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(textFiledEditChanged:)
                                                name:@"UITextFieldTextDidChangeNotification"
                                              object:self.remarkTextField];
    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(textFiledEditChanged:)
                                                name:@"UITextFieldTextDidChangeNotification"
                                              object:self.nameTextField];
                                             
- (void)dealloc{
    //移除通知
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"UITextFieldTextDidChangeNotification" object:self.nameTextField];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"UITextFieldTextDidChangeNotification" object:self.remarkTextField];
    WSLog(@"%s",__func__);
}

實(shí)現(xiàn)計(jì)算中英文混輸字節(jié)計(jì)算

/**
 *  計(jì)算中英文混輸字節(jié)數(shù)
 *
 *  @param s 字符串
 *
 *  @return 返回字節(jié)數(shù)
 */
- (CGFloat)countW:(NSString *)s
{
    int i;CGFloat n=[s length],l=0,a=0,b=0;
    CGFloat wLen=0;
    unichar c;
    for(i=0;i<n;i++){
        c=[s characterAtIndex:i];//按順序取出單個(gè)字符
        if(isblank(c)){//判斷字符串為空或?yàn)榭崭?            b++;
        }else if(isascii(c)){
            a++;
        }else{
            l++;
        }
        wLen=l+(CGFloat)((CGFloat)(a+b)/2.0);
        WSLog(@"wLen--%f",wLen);
        if (wLen>=MaxLength - 0.5 &&wLen<MaxLength + 0.5) {//設(shè)定這個(gè)范圍是因?yàn)橄熬睿?dāng)輸入了當(dāng)輸入9英文渠抹,即4.5蝙昙,后面還能輸1字母,但不能輸1中文
            _subLen=l+a+b;//_subLen是要截取字符串的位置
        }
        
    }
    if(a==0 && l==0)
    {
        _subLen=0;
        return 0;//只有isblank
    }
    else{
        
        return wLen;//長(zhǎng)度梧却,中文占1奇颠,英文等能轉(zhuǎn)ascii的占0.5
    }
}

實(shí)現(xiàn)textdidchange的通知方法**

-(void)textFiledEditChanged:(NSNotification *)obj{
    
    @try{
        
        UITextField * textField =(UITextField *) obj.object;
        
        NSString *str = [[textField text] stringByReplacingOccurrencesOfString:@"?" withString:@""];//輸入的字符,包括鍵盤上高亮的未轉(zhuǎn)成中文的拼音
        NSLog(@"str--%@",str);
        UITextRange *selectedRange = [textField markedTextRange];
        UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0];//高亮
        
        if (!position) {//沒(méi)高亮的文字
            CGFloat ascLen=[self countW:str];//沒(méi)高亮放航,獲取長(zhǎng)度
            NSLog(@"ascLen------------------%f",ascLen);
            if (ascLen > MaxLength) {
                NSString *strNew = [NSString stringWithString:str];
                NSLog(@"strNew--%@",strNew);
                NSLog(@"_subLen%ld",(long)_subLen);
                if (_subLen==0) {
                    _subLen=strNew.length;
                }
                [textField setText:[strNew substringToIndex:_subLen]];
            }
        }
        else{
            //            NSLog(@"輸入的英文還沒(méi)轉(zhuǎn)化為漢字");//只是高亮烈拒,不應(yīng)該算長(zhǎng)度
        }
        
        
    }
    @catch(NSException *exception) {
        NSLog(@"exception:%@", exception);
    }
    @finally {
        
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市广鳍,隨后出現(xiàn)的幾起案子荆几,更是在濱河造成了極大的恐慌,老刑警劉巖赊时,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吨铸,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡祖秒,警方通過(guò)查閱死者的電腦和手機(jī)诞吱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)竭缝,“玉大人房维,你說(shuō)我怎么就攤上這事√е剑” “怎么了咙俩?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)湿故。 經(jīng)常有香客問(wèn)我阿趁,道長(zhǎng),這世上最難降的妖魔是什么晓锻? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任歌焦,我火速辦了婚禮飞几,結(jié)果婚禮上砚哆,老公的妹妹穿的比我還像新娘。我一直安慰自己屑墨,他們只是感情好躁锁,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著卵史,像睡著了一般战转。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上以躯,一...
    開(kāi)封第一講書(shū)人閱讀 51,462評(píng)論 1 302
  • 那天槐秧,我揣著相機(jī)與錄音啄踊,去河邊找鬼。 笑死刁标,一個(gè)胖子當(dāng)著我的面吹牛颠通,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播膀懈,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼顿锰,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了启搂?” 一聲冷哼從身側(cè)響起硼控,我...
    開(kāi)封第一講書(shū)人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎胳赌,沒(méi)想到半個(gè)月后牢撼,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡疑苫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年浪默,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缀匕。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡纳决,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出乡小,到底是詐尸還是另有隱情阔加,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布满钟,位于F島的核電站胜榔,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏湃番。R本人自食惡果不足惜夭织,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望吠撮。 院中可真熱鬧尊惰,春花似錦、人聲如沸泥兰。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)鞋诗。三九已至膀捷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間削彬,已是汗流浹背全庸。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工秀仲, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人壶笼。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓啄育,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親拌消。 傳聞我的和親對(duì)象是個(gè)殘疾皇子挑豌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • UITextField對(duì)象用于在你的界面上顯示一個(gè)可編輯的文本區(qū)域。使用文本區(qū)域可以收集來(lái)自用戶使用屏幕上的鍵盤輸...
    零度_不結(jié)冰閱讀 944評(píng)論 0 0
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法墩崩,類相關(guān)的語(yǔ)法氓英,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法鹦筹,異常的語(yǔ)法铝阐,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,631評(píng)論 18 399
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,116評(píng)論 25 707
  • 剛剛結(jié)束的小學(xué)期末考試,讓我懸了又懸的心終于放下了铐拐。上三年級(jí)的女兒今天拿通知書(shū)徘键,從微信群里看到老師們發(fā)的成績(jī)...
    haovava閱讀 384評(píng)論 1 1
  • 《西海情歌》是刀郎歌曲精品之一,也是百聽(tīng)不厭遍蟋,催人淚下吹害。歌曲創(chuàng)作背景的故事:瑛與勇兒都是南方C市某大學(xué)的學(xué)生。那一...
    晚輩曾阿牛閱讀 9,409評(píng)論 0 1