iOS 5:如何在我的应用程序中禁用Emoji键盘?

18

我不想在我的应用程序中启用Emoji键盘,所以我想只在我的应用程序中禁用它。有一种方法可以通过应用来自此链接的答案来实现

但是这种方法不能在iOS 5上使用(iOS 4.3可用)。是否有任何方法可以在iOS 5中禁用Emoji键盘?谢谢。

3个回答

39

您可以简单地将UITextFieldUITextView的属性keyboardType设置为UIKeyboardTypeASCIICapable来禁用此 UI 元素的表情符号键盘。


9
这将禁用像阿拉伯语、希伯来语等语言。 - Ser Pounce
1
这并不会阻止用户在其中复制粘贴表情符号。 - Ruud Visser
如果textField是用于电子邮件的,需要选择键盘类型为“电子邮件地址”怎么办? - Mohit G.

17

@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;
}

优秀的解决方案,应该标记为正确答案。 - Ser Pounce
isValidString方法不正确地工作。它还会阻止像德语umlauts(ä,ü,ö)等特殊字符... :( - Maniac
我在iOS 7和iOS 8上进行了测试,它可以防止欧元符号和法语重音字符。这对我的应用程序和受众来说是一个重大障碍。 - foob.ar
我有同样的问题。我已经从键盘中禁用了表情符号,但我看到一些用户从其他应用程序(例如:邮件)复制粘贴表情符号。为了防止复制粘贴,我在Github上找到了这个不错的NSSString扩展:https://github.com/woxtu/NSString-RemoveEmoji 希望能帮到你 ;) - Lapinou
尽管基于当前键盘的primaryLanguage阻止输入是一个快速解决方案,但它可能会导致一些混淆,因为在此检查处于活动状态且表情符号键盘是第一响应者时,无法向文本字段添加任何内容。例如,在表情符号键盘打开时粘贴[有效]文本将不起作用。@Lapinou发布链接的类别是更好的解决方案,因为它直接针对表情符号的Unicode值进行检查。 - timgcarlson

0

@Lapinou的回答对我很有帮助,他在github上分享了NSString类别的代码:NSString-RemoveEmoji


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接