【ios學習記錄】- UITextField輸入浮點數的限制

來源:互聯網
上載者:User

標籤:

通常在編輯框中輸入一些貨品數量,金額時,我們都會做一些輸入的判斷限制。例如不能輸入非法字元,只能輸入數字等等。現把最近遇到的一些輸入限制需求展現如下:

1、 輸入小數位不能超過兩位;
2、 不能重複輸入小數點;
3、 不能輸入除數字以外的字元(但不包括退格鍵,負號鍵);
4、 限制長度為最小為1,最大為11。

為了實現以上需求,主要是依靠以下UITextFieldDelegate的一個協議方法來實現的:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{功能:  把textField中位置為range的字串替換為string字串;  此函數在textField內容被修改時調用;傳回值:  YES,表示修改生效;NO,表示不做修改,textField的內容不變。參數說明:  textField:響應UITextFieldDelegate協議的UITextField控制項。  range:    UITextField控制項中游標選中的字串,即被替換的字串;          range.length為0時,表示在位置range.location插入string。  string:    替換字串;  string.length為0時,表示點擊了刪除delete鍵。

以下所有的代碼需要寫在該函數中。

1、 輸入小數位不能超過兩位

/** *  檢查浮點數小數位並校正小數點合法性 * *  @param range     浮點數總長度 *  @param dotPlaces 小數位 *  @param decimal   浮點數 *  @param string    當前輸入的數值 * *  @return YES:沒有小數點或者限制兩位浮點數 NO */+ (BOOL)checkDecimalDotPlaces:(NSRange)range dotPlaces:(NSNumber *)dotPlaces decimal:(NSString *)decimal{    BOOL bHaveDot = false;    if (dotPlaces.integerValue < 0) {        dotPlaces = @0;    }    if ([decimal rangeOfString:@"."].location == NSNotFound){        bHaveDot = false;    }else{        bHaveDot = true;    }    if (bHaveDot) {        //判斷小數點的位元        NSRange ran = [decimal rangeOfString:@"."];        if (range.location - ran.location > dotPlaces.integerValue) {            return NO;        }    }    return YES;}

2、 不能重複輸入小數點

//不能再輸入小數點if ([string rangeOfString:@"."].location != NSNotFound && [textField.text rangeOfString:@"."].location == NSNotFound) {return NO;}

3、 不能輸入除數字以外的字元(但不包括退格鍵,負號鍵)

//不能輸入字串if ([string rangeOfString:@"."].location == NSNotFound)              {   NSRange range = [string rangeOfString:@"^[0-9-]+$" options:NSRegularExpressionSearch];   if (range.location == NSNotFound) {       return NO;   }}//刪除delete鍵if ([string isEqualToString:@""]) {   return YES;}

4、 限制長度為最小為1,最大為11位

NSString *pwdRegex = @"[0-9]{1,10}";NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES%@",pwdRegex];if ([predicate evaluateWithObject:textField.text] || ![textField.text notEmpty]) {    return YES;}else{    return NO;}

另外,對於字串的判斷可以選擇在NSString的分類擴充裡進行設定,如NSString+Extension。

總代碼如下:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{    //不能再輸入小數點    if ([string rangeOfString:@"."].location != NSNotFound && [NSString isHaveDot:textField.text]) {        return NO;    }    //delete    if ([string isEqualToString:@""]) {        return YES;    }    //不能輸入字串    if ([string rangeOfString:@"."].location == NSNotFound) {        NSRange range = [string rangeOfString:@"^[0-9]+$" options:NSRegularExpressionSearch];        if (range.location == NSNotFound) {            return NO;        }     }    //限制長度為最小為1,最大為11位    NSString *pwdRegex = @"[0-9]{1,10}";    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES%@",pwdRegex];    if ([predicate evaluateWithObject:textField.text] || ![textField.text notEmpty])                     {    return YES;    }else{        return NO;    }    //限制小數位長度不超過2    if (![NSString checkDecimalDotPlaces:range dotPlaces:ZHJFloatDotPlaces decimal:textField.text]) {        return NO;    }    return YES;}

【ios學習記錄】- UITextField輸入浮點數的限制

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.