001 UITextView 限定长度
_noteStr就是开发者自己要控制的TextView
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{
if ([NSString stringContainsEmoji:text]) {
text = [NSString filterEmoji:text];
return NO;
}
if (_noteStr.text.length > 50) {
[SVProgressHUD showInfoWithStatus:@"最多输入50字符"];
_noteStr.text = [textView.text substringToIndex:50];
}
_limitNumLab.text = [NSString stringWithFormat:@"%ld/50",textView.text.length];
return YES;
}
002 UITextFiled 限定长度
-(void)textFieldDidChange :(UITextField *)theTextField{
if (theTextField.text.length >1) {
theTextField.text = [toBeString substringToIndex:1];
}
}
003 判断输入😊
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{
if ([NSString stringContainsEmoji:text]) {
text = [NSString filterEmoji:text];
return NO;
}
return YES;
}
+ (BOOL)stringContainsEmoji:(NSString *)string{
__block BOOL returnValue = NO;
[string enumerateSubstringsInRange:NSMakeRange(0, string.length) options:NSStringEnumerationByComposedCharacterSequences usingBlock:^(NSString * _Nullable substring, NSRange substringRange, NSRange enclosingRange, BOOL * _Nonnull stop) {
const unichar hs = [substring characterAtIndex:0];
if (0xd800 <= hs && hs <= 0xdbff){
if (substring.length > 1){
const unichar ls = [substring characterAtIndex:1];
const int uc = (hs - 0xd800) * 0x400 + (ls - 0xdc00) + 0x10000;
if (0x1d000 <= uc && uc <= 0x1f77f){
// 有emoji;
returnValue = YES;
}
}
}else if (substring.length > 1){
const unichar ls = [substring characterAtIndex:1];
if (ls == 0x20e3){
// 有emoji
returnValue = YES;
}
}else{
if (0x2100 <= hs && hs <= 0x27ff){
returnValue = YES;
}else if (0x2B05 <= hs && hs <= 0x2b07){
returnValue = YES;
}else if (0x2934 <= hs && hs <= 0x2935){
returnValue = YES;
}else if (0x3297 <= hs && hs <= 0x3299){
returnValue = YES;
}else if (hs == 0xa9 || hs == 0xae || hs == 0x303d || hs == 0x3030 || hs == 0x2b55 || hs == 0x2b1c || hs == 0x2b1b || hs == 0x2b50 ){
returnValue = YES;
}else if (hs == 0x200d){
returnValue = YES;
}
}
}];
return returnValue;
}
+ (NSString *)filterEmoji:(NSString *)string{
__block NSString *newText = @"";
BOOL isContainsEmoji = [NSString stringContainsEmoji:string];
if (isContainsEmoji){
if (string.length == 1){
newText = [string substringToIndex:string.length - 1];
}else{
newText = [string substringToIndex:string.length - 2];
}
}else{
newText = string;
}
return newText;
}
总结:感谢测试提出的优化点