一、限制输入字数
方案一
//只能判断非联想输入,pass
- (BOOL)textView:(UITextView *)textView
shouldChangeTextInRange:(NSRange)range
replacementText:(NSString *)text
方案二
//通用方法
- (void)textViewDidChange:(UITextView *)textView;
经常碰到UITextView限制输入字数的需求,那么问题来了,系统键盘中文输入法时,拼音也会显示在输入框中,这样在所以没输入一个字母,都会执行- (void)textViewDidChange:(UITextView *)textView,从而使得计算最大字数出现问题,解决办法如下:
在 - (void)textViewDidChange:(UITextView *)textView方法中
if ([[[textView textInputMode] primaryLanguage] isEqualToString:@"zh-Hans"]) {
UITextRange *selectedRange = [textView markedTextRange];
UITextPosition *position = [textView positionFromPosition:selectedRange.start offset:0];
if (!position) {
//计算字数
}
}else {
//计算字数
}
}
上面这个方法在iOS9上,中文输入法下一直输入,position会为空,从而导致用户输入的拼音都不见了。
有些时候为了防止刷屏,只输入换行的情况下是不允许发送的,对于像讯飞、百度这样的键盘可以用这样判断:
if ([[text stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@" \n"]] isEqualToString:@""]) {
return;
}
搜狗的换行为\r
禁用第三方键盘:在Appdelegate里
- (BOOL)application:(UIApplication *)application shouldAllowExtensionPointIdentifier:(NSString *)extensionPointIdentifier
{
return NO;
}