18

我不想在我的应用程序中使用表情符号键盘,所以我只想在我的应用程序中禁用它。有一种方法可以通过应用此链接的答案来做到这一点:

制作表情符号启用应用程序

但这在 iOS 5 上不起作用(iOS 4.3 可以工作)。有什么方法可以在 iOS 5 中禁用表情符号键盘。谢谢。

4

3 回答 3

39

您可以简单地将keyboardTypeUITextField 或 UITextView 的属性设置为UIKeyboardTypeASCIICapable. 这会为此 UI 元素禁用表情符号键盘。

于 2012-05-23T12:17:34.787 回答
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;
}
于 2014-03-12T09:22:05.120 回答
0

@Lapinou 的回答帮助了我,在 github 上重新发布了他的 NSString 类别:NSString-RemoveEmoji

于 2015-07-14T06:08:14.683 回答