2011-12-29 6 views

risposta

37

È possibile impostare semplicemente la proprietà keyboardType di UITextField o UITextView su UIKeyboardTypeASCIICapable. Questo disabilita la tastiera Emoji per questo elemento dell'interfaccia utente.

+0

ha funzionato perfettamente – Yanchi

+8

Questo disabiliterà lingue come l'arabo, l'ebraico, ecc, tuttavia . –

+0

Grazie per queste informazioni utili –

17

@mschluepmann, ma impostato UIKeyboardTypeASCIICapable non può cinese ingresso

E lo si può fare come qui di seguito

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

Ma a volte, l'emoji può non accettata dalla tastiera emoji. Ad esempio, quando digiti "哈哈" mostra emoji sull'intestazione della tastiera. Nel caso, il codice sopra non avrà alcun effetto. Così si dovrebbe fare una convalida il doppio seguente:

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

Soluzione eccellente, questa dovrebbe essere contrassegnata come la vera risposta. –

+0

il metodo isValidString non funziona correttamente. Blocca anche caratteri speciali come le dieresi tedesche (ä, ü, ö) e così via ... :( – Maniac

+0

Ho testato questo su iOS 7 e iOS 8 e previene il simbolo dell'euro e caratteri francesi accentati. applicazione e pubblico –