iOS 限制輸入框只能輸入小數(shù)并且小數(shù)點后只能一位

首先說一下我們想要的效果


image.png

這個輸入框的要求是只能輸入 負號 小數(shù) 這里我們還要保證“-”一定要只能是第一位而且只能輸入一個負號,還有就是“.”小數(shù)點的限制,首先要說小數(shù)點不能是第一位,并且不能有多個點

1 主要限制還是依賴于 UITextField 的delegate

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;   // return NO to not change text

textField 這個參數(shù)沒什么好說的 肯定是當前光標所在的輸入框, range 這個參數(shù)就是當前光標所在的位置 NSRange是一個結(jié)構(gòu)體


image.png

后面那個 string 參數(shù)就是鍵盤內(nèi)這詞輸入進入的內(nèi)容

這樣我們就可以在這個代理里面做我們想要的攔截

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    return [self validateNumberWithTextField:textField changeRange:range withString:string];
}

- (BOOL)validateNumberWithTextField:(UITextField *)textField changeRange:(NSRange)range withString:(NSString*)replacementString {
    // “-” 必須是第一個位置也可保證只有一個 “-”
    if ([replacementString isEqualToString:@"-"]) {
        if (range.location != 0 ) {
            return NO;
        }
    }
    //只允許輸入一個小數(shù)點
    if ([textField.text containsString:@"."] && [replacementString isEqualToString:@"."]) {
        return NO;
    }
    //小數(shù)點不能為第一位
    if (textField.text.length == 0 && [replacementString isEqualToString:@"."]) {
        return NO;
    }
    //限制小數(shù)點后只能輸一位數(shù)字
    NSArray * arrStr = [[textField.text stringByAppendingString:replacementString] componentsSeparatedByString:@"."];
        if (arrStr.count>1) {
            NSString *str1 = arrStr.lastObject;
            if (str1.length>1) {
                return NO;
            }
        }
//限制只能輸入 "-0123456789."
    NSCharacterSet* tmpSet = [NSCharacterSet characterSetWithCharactersInString:@"-0123456789."];
    //if (textField == self.moneyTF) {//如果是后面那個輸入金額的textFiled則限制 限制只能輸入 "-0123456789"
       // tmpSet = [NSCharacterSet characterSetWithCharactersInString:@"-0123456789"];
    //}
    BOOL res = YES;
    int i = 0;
    while (i < replacementString.length) {
        NSString * string = [replacementString substringWithRange:NSMakeRange(i, 1)];
        NSRange range = [string rangeOfCharacterFromSet:tmpSet];
        if (range.length == 0) {
            res = NO;
            break;
        }
        i++;
    }
    return res;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容