2011-12-29 22 views

Odpowiedz

37

Możesz po prostu ustawić właściwość keyboardType z UITextField lub UITextView na UIKeyboardTypeASCIICapable. Spowoduje to wyłączenie klawiatury Emoji dla tego elementu interfejsu użytkownika.

+0

pracował idealnie – Yanchi

+8

Spowoduje to wyłączenie języków takich jak arabski, hebrajski, itd jednak . –

+0

Dzięki za te przydatne informacje –

17

@mschluepmann, ale nie można ustawić UIKeyboardTypeASCIICapable wejście chińskiego

I można to zrobić jak poniżej

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

Ale Czasami emotikonów może nie wszedł przez Klawiatura z emotikonami. Na przykład, gdy wpiszesz "哈哈", wyświetli się emoji w nagłówku klawiatury. W powyższym kodzie powyższy kod nie przyniesie żadnego efektu. Więc należy zrobić dwa razy walidacji w następujący sposób:

- (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

Doskonałe rozwiązanie, powinno to być oznaczone jako prawdziwa odpowiedź. –

+0

Metoda isValidString nie działa poprawnie. Blokuje również znaki specjalne, takie jak niemieckie umlauty (ä, ü, ö) itd. :( – Maniac

+0

Przetestowałem to na iOS 7 i iOS 8 i zapobiega to znakom Euro Symbol i francuskim literom akcentowanym. Aplikacja i publiczność: –

Powiązane problemy