如何禁用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]; }
被警告,正如我在另一篇文章中所看到的,这也可能阻止用户使用具有特殊字符的键盘,如中国人。
只是为了更新面向与我相同问题的任何人的上述优秀答案:
- 设置为keyboardType = .EmailAddress的电子邮件字段仍允许使用表情符号
- 您可能有多个条件要过滤
- 迅速
- 防止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
我确定它会帮助某人=)