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输入限制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: adb通信协议分析以及实现(二):adb
- 下一篇: 【Excle数据透视表】如何创建非共享缓