2011-12-29 13 views

Respuesta

37

Puede simplemente establecer la propiedad keyboardType del UITextField o UITextView en UIKeyboardTypeASCIICapable. Esto desactiva el teclado Emoji para este elemento UI.

+0

funcionaba perfectamente – Yanchi

+8

Esto desactivará idiomas como el árabe, hebreo, etc. Sin embargo . –

+0

Gracias por esta información útil –

17

@mschluepmann, pero se especificó UIKeyboardTypeASCIICapable no puede de entrada de China

Y usted puede hacerlo como a continuación

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

Pero a veces, el emoji puede no ingresado por el teclado emoji. Por ejemplo, cuando escribe "哈哈" muestra emoji en el encabezado del teclado. En el caso, el código anterior no tendrá efecto. Por lo que debe hacer una validación doble de lo siguiente:

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

Excelente solución, esto debe marcarse como la verdadera respuesta. –

+0

el método isValidString no funciona correctamente. También bloquea caracteres especiales como umlauts alemanes (ä, ü, ö) y así sucesivamente ... :( – Maniac

+0

Probé esto en iOS 7 y iOS 8 y evita Euro Symbol y los caracteres acentuados en francés. Este es un bloqueador importante para mi aplicación y audiencia. –

Cuestiones relacionadas