2011-12-29 11 views
16

Tôi không muốn phụ cấp bàn phím Emoji trong ứng dụng của mình nên tôi chỉ muốn vô hiệu hóa nó trong ứng dụng của mình. Có một cách để làm điều đó bằng cách áp dụng các câu trả lời từ liên kết này:iOS 5: Làm cách nào để tắt bàn phím Emoji trong ứng dụng của tôi?

Making An Emoji Enabeling App

Nhưng sẽ không công việc này trên iOS 5 (iOS 4.3 làm việc). Có cách nào để vô hiệu hóa bàn phím Emoji trong iOS 5. Cảm ơn bạn.

Trả lời

37

Bạn chỉ có thể đặt thuộc tính keyboardType của UITextField hoặc UITextView thành UIKeyboardTypeASCIICapable. Thao tác này sẽ tắt Bàn phím biểu tượng cảm xúc cho phần tử giao diện người dùng này.

+0

làm việc một cách hoàn hảo – Yanchi

+8

này sẽ vô hiệu hóa các ngôn ngữ như tiếng Ả Rập, tiếng Hebrew, vv Tuy nhiên . –

+0

Cảm ơn thông tin hữu ích này –

17

@mschluepmann, Nhưng thiết UIKeyboardTypeASCIICapable thể không đầu vào Trung Quốc

Và bạn có thể làm điều đó như dưới đây

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

Nhưng đôi khi, những biểu tượng cảm xúc có thể không được nhập bởi bàn phím biểu tượng cảm xúc. Ví dụ: khi bạn nhập "哈哈", nó sẽ hiển thị biểu tượng cảm xúc trên đầu trang của bàn phím. Trong trường hợp này, mã ở trên sẽ không có hiệu lực. Vì vậy, bạn nên làm một xác nhận hai lần như sau:

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

Giải pháp tuyệt vời, điều này nên được đánh dấu là câu trả lời đúng. –

+0

phương thức isValidString không hoạt động chính xác. Nó cũng chặn các ký tự đặc biệt như tiếng Nga (ä, ü, ö) và vân vân ... :( – Maniac

+0

Tôi đã thử nghiệm tính năng này trên iOS 7 và iOS 8 và nó ngăn Euro Symbol và các ký tự có dấu tiếng Pháp. –