@mschluepmann, Nhưng thiết UIKeyboardTypeASCIICapable thể không đầu vào Trung Quốc
Và bạn có thể làm điều đó như dưới đây
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if (IS_OS_7_OR_LATER) {
if ([textField isFirstResponder]) {
if ([[[textField textInputMode] primaryLanguage] isEqualToString:@"emoji"] || ![[textField textInputMode] primaryLanguage]) { // In fact, in iOS7, '[[textField textInputMode] primaryLanguage]' is nil
return NO;
}
}
} else {
if ([[[UITextInputMode currentInputMode] primaryLanguage] isEqualToString:@"emoji"]) {
return NO;
}
}
return YES;
}
Nhưng đôi khi, những biểu tượng cảm xúc có thể không được nhập bởi bàn phím biểu tượng cảm xúc. Ví dụ: khi bạn nhập "哈哈", nó sẽ hiển thị biểu tượng cảm xúc trên đầu trang của bàn phím. Trong trường hợp này, mã ở trên sẽ không có hiệu lực. Vì vậy, bạn nên làm một xác nhận hai lần như sau:
- (BOOL)isValidString
{
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[^\\u0020-\\u007E\\u00A0-\\u00BE\\u2E80-\\uA4CF\\uF900-\\uFAFF\\uFE30-\\uFE4F\\uFF00-\\uFFEF\\u0080-\\u009F\\u2000-\\u201f\r\n]" options:NSRegularExpressionCaseInsensitive error:nil];
NSUInteger numberOfMatches = [regex numberOfMatchesInString:self options:NSMatchingWithTransparentBounds range:NSMakeRange(0, [self length])];
if (numberOfMatches > 0) {
return NO;
}
return YES;
}
làm việc một cách hoàn hảo – Yanchi
này sẽ vô hiệu hóa các ngôn ngữ như tiếng Ả Rập, tiếng Hebrew, vv Tuy nhiên . –
Cảm ơn thông tin hữu ích này –