如何禁用iOS 8表情符号键盘?

有什么select停止在iOS 8中显示表情符号键盘? 这是不可用的数字键盘和安全的文本,但电子邮件是在那里。 如果不能禁用它,如何从表情符号获取string值?

尝试这个:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { if ([textField isFirstResponder]) { if ([[[textField textInputMode] primaryLanguage] isEqualToString:@"emoji"] || ![[textField textInputMode] primaryLanguage]) { return NO; } } return YES; } 

更多信息请看这里 。

编辑:

您可以使用以下代码从键盘隐藏表情符号:

 txtField.keyboardType=UIKeyboardTypeASCIICapable; 

编辑:

使用“接口”构build器从键盘中隐藏表情符号select。

在这里输入图像说明

这适用于iOS 7和8:

 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { // Disable emoji input return [textField textInputMode] != nil; } 

为我工作的解决scheme:

 self.texField.keyboardType = UIKeyboardTypeASCIICapable; 

表情符号键盘将不可用该键盘types。

但是必须检查textField中添加的每个字符的种类,因为用户可以从别处复制表情符号然后粘贴到其中。

你可以这样做:

 - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { return [text canBeConvertedToEncoding:NSASCIIStringEncoding]; } 

被警告,正如我在另一篇文章中所看到的,这也可能阻止用户使用具有特殊字符的键盘,如中国人。

只是为了更新面向与我相同问题的任何人的上述优秀答案:

  1. 设置为keyboardType = .EmailAddress的电子邮件字段仍允许使用表情符号
  2. 您可能有多个条件要过滤
  3. 迅速
  4. 防止C&P

这是我们如何做到的:

 func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { if !string.canBeConvertedToEncoding(NSASCIIStringEncoding){ return false } //other conditons } 

编辑

好的NSASCIIStringEncoding解决scheme是不好的,如果你想允许其他语言的某些字符。

有些字母被NSASCIIStringEncoding封锁:

  • 所有其他版本的:àáâäæãåā
  • 所有其他版本的e:èéêëēėę
  • 所有其他版本的o:ôöòóœøōõ

如果你想支持来自其他国家的用户,使用NSASCIIStringEncoding并不是一个好主意!

我也试过NSISOLatin1StringEncoding:

  • 阻止版本的:ā
  • 阻止版本的e:ēėę
  • 阻止版本的o:œø

这明显好多了。

我也试过NSISOLatin2StringEncoding:

  • 阻止版本的a:àæãåā
  • e:èêēē的封锁版本
  • o:òœøōõ的封锁版本

更差。

EDIT2:

以下似乎工作:

 extension String { func containsEmoji() -> Bool { for i in self.characters { if i.isEmoji() { return true } } return false } } extension Character { func isEmoji() -> Bool { return Character(UnicodeScalar(0x1d000)) <= self && self <= Character(UnicodeScalar(0x1f77f)) || Character(UnicodeScalar(0x1f900)) <= self && self <= Character(UnicodeScalar(0x1f9ff)) || Character(UnicodeScalar(0x2100)) <= self && self <= Character(UnicodeScalar(0x26ff)) } } 

现在我们呼吁:

 func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { if string.containsEmoji() { return false } //other conditons } 

在迅速3.0

textField.keyboardType = .asciiCapable

这是很快的版本。

 func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool { if textView.isFirstResponder() { if textView.textInputMode?.primaryLanguage == nil || textView.textInputMode?.primaryLanguage == "emoji" { return false; } } return true; } 

Swift 3.1解决scheme

 // MARK: - Text Field Delegate func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { return textField.textInputMode != nil } 

在Swift中: – 它会限制在TextView中通过表情符号,只需将键盘types改为支持ascii

 func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool { var result = Bool() let disallowedCharacterSet1 = NSCharacterSet.symbolCharacterSet() let replacementStringIsLegal = text.rangeOfCharacterFromSet(disallowedCharacterSet1) == nil result = replacementStringIsLegal let newLength = textView.text!.utf16.count + text.utf16.count - range.length return newLength <= 300 && result // Bool } 

我希望Swift 3.0的答案能够在shouldChangeTextInRange工作,并且提出了以下非常简单的方法,可以处理任何语言(包括使用中文演示的照片)。

guard语句展开可选文本,return语句检查是否取出了满足trimmingCharacters检查的值。 如果有一个值(意思是它不是当前设备的input语言的一部分),那么它不会是空的,所以该方法返回false,不允许input字符。

 func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { guard let text = (textField.text as NSString?)?.replacingCharacters(in: range, with: string) else { return true } return text.trimmingCharacters(in: CharacterSet.alphanumerics).isEmpty } 

这依赖于Apple的CharacterSet.alphanumerics ,所以不需要维护和更新已批准字符的列表,除非您想添加或删除项目。

在这里输入图像说明

对于语言不可知的耶!

因为默认的电子邮件键盘提供表情符号,所以另一个常用的用途是电子邮件。 我发现有一个小的修改,我能够限制字符到我想要的电子邮件地址工作。

 func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { guard let text = (textField.text as NSString?)?.replacingCharacters(in: range, with: string) else { return true } return text.trimmingCharacters(in: CharacterSet.alphanumerics).isEmpty || !text.characters.filter { $0 == "@" || $0 == "." }.isEmpty } 

虽然这个问题是超级老,我面对同样的问题,并能够解决这个页面加载这个小窍门:

只需在界面生成器Xcode 8.2.1中select“ASCII能力”或“数字和标点”

在这里输入图像说明 在这里输入图像说明

输出是否表情符号键盘= D

在这里输入图像说明

我确定它会帮助某人=)