Ответ 1
Вы можете просто установить свойство keyboardType
UITextField или UITextView на UIKeyboardTypeASCIICapable
. Это отключает клавиатуру Emoji для этого элемента пользовательского интерфейса.
Я не хочу, чтобы в моем приложении была учтено клавиатура Emoji, поэтому я хочу отключить ее только в своем приложении. Есть один способ сделать это, применив ответ по этой ссылке:
Создание приложения Emoji Enabeling
Но это будет не работа на iOS 5 (iOS 4.3 работает). Есть ли способ отключить клавиатуру Emoji в iOS 5. Спасибо.
Вы можете просто установить свойство keyboardType
UITextField или UITextView на UIKeyboardTypeASCIICapable
. Это отключает клавиатуру Emoji для этого элемента пользовательского интерфейса.
@mschluepmann, но set 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 может не вводить клавиатуру emoji. Например, когда вы набираете "哈哈", он показывает 😄 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;
}
@Ответ Lapinou помог мне, переназначить его категорию NSString на github: NSString-RemoveEmoji