2011-12-29 21 views

回答

37

您可以簡單地將UITextField或UITextView的屬性keyboardType設置爲UIKeyboardTypeASCIICapable。這將禁用此UI元素的表情符號鍵盤。

+0

工作完全 – Yanchi 2013-10-09 11:06:38

+8

這將禁用像阿拉伯語,希伯來語等語言不過。 – 2014-05-19 18:26:39

+0

感謝這個有用的信息 – 2014-12-05 06:18:39

17

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

但有時,表情符號可能無法通過表情符號鍵盤輸入。例如,當您鍵入「哈哈」時,它會在鍵盤的標題上顯示錶情符號。在這種情況下,上面的代碼將不起作用。所以,你應該做的兩次檢驗如下:

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

優秀的解決方案,這應該被標記爲真正的答案。 – 2014-05-23 22:26:33

+0

isValidString方法無法正常工作。它也阻止像德國元音變音(ä,ü,ö)等特殊字符...... :( – Maniac 2014-10-07 10:37:15

+0

我在iOS 7和iOS 8上測試過它,它可以防止歐元符號和法語重音字符。應用程序和觀衆 – 2014-12-03 19:14:29

相關問題