我不想在我的应用程序中启用Emoji键盘,所以我想只在我的应用程序中禁用它。有一种方法可以通过应用来自此链接的答案来实现:
但是这种方法不能在iOS 5上使用(iOS 4.3可用)。是否有任何方法可以在iOS 5中禁用Emoji键盘?谢谢。
您可以简单地将UITextField
或UITextView
的属性keyboardType
设置为UIKeyboardTypeASCIICapable
来禁用此 UI 元素的表情符号键盘。
@mschluepmann,但设置UIKeyboardTypeASCIICapable无法输入中文
您可以像以下方式操作
- (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;
}
但是有时候,表情符号可能无法通过表情键盘输入。例如,当您键入“哈哈”时,它会在键盘的标题上显示一个表情符号。在这种情况下,上面的代码将没有效果。所以,您应该进行两次验证,如下所示:
- (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;
}
primaryLanguage
阻止输入是一个快速解决方案,但它可能会导致一些混淆,因为在此检查处于活动状态且表情符号键盘是第一响应者时,无法向文本字段添加任何内容。例如,在表情符号键盘打开时粘贴[有效]文本将不起作用。@Lapinou发布链接的类别是更好的解决方案,因为它直接针对表情符号的Unicode值进行检查。 - timgcarlson