对textView 的输入个数进行判断
- (
BOOL
)textView:(
UITextView
*)textView
shouldChangeTextInRange
:(NSRange)range
replacementText
:(
NSString
*)text
{
/*
if ([text isEqualToString:@"\n"])
{
[textView resignFirstResponder]; return NO;
}else if([textView.text length] >= 30 && ![text isEqualToString:@""]){
return NO;
}
return YES;
*/
// return YES;
int
_textMaxLength =
6
0
;
if
(_textMaxLength ==
0
) {
return
YES
;
}
void
(^dealWithTexts)(
void
) = ^() {
NSString
*textInField = [textView
.text
substringToIndex
:range
.location
];
int
inputedHanzi = [[textInField
componentsMatchedByRegex
:
@"[\u4e00-\u9fa5]"
]
count
];
int
inputedLength = textInField
.length
+ inputedHanzi;
int
allowedLength = _textMaxLength - inputedLength;
int
length =
0
;
int
stop = text
.length
;
for
(
int
i =
0
; i < text
.length
; i++) {
NSString
*c = [text
substringWithRange
:NSMakeRange(i,
1
)];
if
([c
isMatchedByRegex
:
@"[\u4e00-\u9fa5]"
]) {
if
(length +
2
> allowedLength) { stop = i; break; }
length +=
2
;
}
else
{
if
(length +
1
> allowedLength) { stop = i; break; }
length++;
}
}
NSString
*shouldAddedString = [text
substringToIndex
:stop];
NSString
*textShouldInField = [
NSString
stringWithFormat
:
@"%@%@"
,textInField,shouldAddedString];
[textView
performSelector
:
@selector
(setText:)
withObject
:textShouldInField
afterDelay
:
0
.0
];
};
if
(
1
== range
.length
&& text
.length
==
0
)
{
return
YES
;
//删除
}
else
if
(range
.length
>
1
) {
dealWithTexts();
return
YES
;
}
else
{
NSString
* text
2
= [textView
.text
stringByReplacingCharactersInRange
:range
withString
:text];
text
2
= [text
2
stringByReplacingOccurrencesOfRegex
:
@"[\u4e00-\u9fa5]"
withString
:
@"##"
];
int
symbol = [[text
2
componentsMatchedByRegex
:
@"\u2006"
]
count
];
if
( _textMaxLength >
0
&& text
2
.length
- symbol > _textMaxLength )
{
if
(text
.length
>
1
) {
dealWithTexts();
return
YES
;
}
return
NO
;
}
return
YES
;
}
}
posted on 2015-07-23 11:56 yucaijiang 阅读(320) 评论(0) 编辑 收藏 举报