iOS 5: Как отключить клавиатуру Emoji в моем приложении? - PullRequest
17 голосов
/ 29 декабря 2011

Я не хочу, чтобы клавиатура Emoji поддерживалась в моем приложении, поэтому я хочу отключить ее только в моем приложении.Есть один способ сделать это, применив ответ по этой ссылке:

Создание приложения Emoji Enabeling

Но это будет не работать наiOS 5 (iOS 4.3 работает).Есть ли способ отключить клавиатуру Emoji в iOS 5. Спасибо.

Ответы [ 3 ]

38 голосов
/ 23 мая 2012

Вы можете просто установить для свойства keyboardType UITextField или UITextView значение UIKeyboardTypeASCIICapable.Это отключает клавиатуру Emoji для этого элемента пользовательского интерфейса.

17 голосов
/ 12 марта 2014

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

Но иногда эмодзи могут не вводиться с помощью клавиатуры эмодзи. Например, когда вы вводите «哈哈», в заголовке клавиатуры отображается «emoji». В этом случае приведенный выше код не будет иметь никакого эффекта. Таким образом, вы должны выполнить двойную проверку следующим образом:

- (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;
}
0 голосов
/ 14 июля 2015

@ Ответ Лапину мне помог, перепост его категории NSString на github: NSString-RemoveEmoji

...