日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

textField textView输入限制

發布時間:2025/7/14 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 textField textView输入限制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、小數點后兩位,只能輸入數字和小數點 @property (nonatomic, assign) BOOL isHaveDian; @property (nonatomic, assign) BOOL isFirstZero; if ([textField.text rangeOfString:@"."].location==NSNotFound) { _isHaveDian = NO; } if ([textField.text rangeOfString:@"0"].location==NSNotFound) { _isFirstZero = NO; }

if ([string length]>0) {if (textField.text.length > 12) {return NO;}unichar single=[string characterAtIndex:0];//當前輸入的字符if ((single >='0' && single<='9') || single=='.')//數據格式正確{if([textField.text length]==0){if(single == '.'){//首字母不能為小數點return NO;}if (single == '0') {_isFirstZero = YES;return YES;}}if (single=='.'){if(!_isHaveDian)//text中還沒有小數點{_isHaveDian=YES;return YES;}else{return NO;}}else if(single=='0'){if ((_isFirstZero&&_isHaveDian)||(!_isFirstZero&&_isHaveDian)) {//首位有0有.(0.01)或首位沒0有.(10200.00)可輸入兩位數的0if([textField.text isEqualToString:@"0.0"]){return NO;}NSRange ran=[textField.text rangeOfString:@"."];int tt=(int)(range.location-ran.location);if (tt <= 2){return YES;}else{return NO;}}else if (_isFirstZero&&!_isHaveDian){//首位有0沒.不能再輸入0return NO;}else{return YES;}}else{if (_isHaveDian){//存在小數點,保留兩位小數NSRange ran=[textField.text rangeOfString:@"."];int tt= (int)(range.location-ran.location);if (tt <= 2){return YES;}else{return NO;}}else if(_isFirstZero&&!_isHaveDian){//首位有0沒點return NO;}else{return YES;}}}else{//輸入的數據格式不正確return NO;} }else{return YES; } 復制代碼

2、textView輸入位數的限制

  • (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { UITextRange *selectedRange = [textView markedTextRange]; //獲取高亮部分 UITextPosition *pos = [textView positionFromPosition:selectedRange.start offset:0]; //獲取高亮部分內容 //NSString * selectedtext = [textView textInRange:selectedRange];

    //如果有高亮且當前字數開始位置小于最大限制時允許輸入 if (selectedRange && pos) { NSInteger startOffset = [textView offsetFromPosition:textView.beginningOfDocument toPosition:selectedRange.start]; NSInteger endOffset = [textView offsetFromPosition:textView.beginningOfDocument toPosition:selectedRange.end]; NSRange offsetRange = NSMakeRange(startOffset, endOffset - startOffset);

    if (offsetRange.location < maxNum) {return YES;}else{return NO;} 復制代碼

    }

    NSString *comcatstr = [textView.text stringByReplacingCharactersInRange:range withString:text];

    NSInteger caninputlen = maxNum - comcatstr.length;

    if (caninputlen >= 0) { return YES; } else { NSInteger len = text.length + caninputlen; //防止當text.length + caninputlen < 0時,使得rg.length為一個非法最大正數出錯 NSRange rg = {0,MAX(len,0)};

    if (rg.length > 0){NSString *s = @"";//判斷是否只普通的字符或asc碼(對于中文和表情返回NO)BOOL asc = [text canBeConvertedToEncoding:NSASCIIStringEncoding];if (asc) {s = [text substringWithRange:rg];//因為是ascii碼直接取就可以了不會錯}else{__block NSInteger idx = 0;__block NSString *trimString = @"";//截取出的字串//使用字符串遍歷,這個方法能準確知道每個emoji是占一個unicode還是兩個[text enumerateSubstringsInRange:NSMakeRange(0, [text length])options:NSStringEnumerationByComposedCharacterSequencesusingBlock: ^(NSString* substring, NSRange substringRange, NSRange enclosingRange, BOOL* stop) {if (idx >= rg.length) {*stop = YES; //取出所需要就break,提高效率return ;}trimString = [trimString stringByAppendingString:substring];idx++;}];s = trimString;}//rang是指從當前光標處進行替換處理(注意如果執行此句后面返回的是YES會觸發didchange事件)[textView setText:[textView.text stringByReplacingCharactersInRange:range withString:s]];//既然是超出部分截取了,哪一定是最大限制了。NSLog(@"%@",[NSString stringWithFormat:@"%d/%ld",0,(long)maxNum]);}return NO; 復制代碼

    }

}

  • (void)textViewDidChange:(UITextView *)textView { UITextRange *selectedRange = [textView markedTextRange]; //獲取高亮部分 UITextPosition *pos = [textView positionFromPosition:selectedRange.start offset:0];

    //如果在變化中是高亮部分在變,就不要計算字符了 if (selectedRange && pos) { return; }

    NSString *nsTextContent = textView.text; NSInteger existTextNum = nsTextContent.length;

    if (existTextNum > maxNum) { //截取到最大位置的字符(由于超出截部分在should時被處理了所在這里這了提高效率不再判斷) NSString *s = [nsTextContent substringToIndex:maxNum];

    [textView setText:s]; 復制代碼

    }

    NSLog(@"%@",[NSString stringWithFormat:@"%ld/%ld",MAX(0,maxNum - existTextNum),(long)maxNum]); }

轉載于:https://juejin.im/post/5a30f94b51882575d42f60f2

總結

以上是生活随笔為你收集整理的textField textView输入限制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。