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

sou*_*cse 37 ios ios8

有没有选择停止在iOS 8中显示表情符号键盘?它不适用于小键盘和安全文本,但对于电子邮件,它就在那里.如果无法禁用它如何从表情符号中获取字符串值?

Yas*_*tel 107

试试这个:

- (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;
}
Run Code Online (Sandbox Code Playgroud)

更多信息请参见这里.

编辑:

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

txtField.keyboardType=UIKeyboardTypeASCIICapable;
Run Code Online (Sandbox Code Playgroud)

编辑:

使用"界面"构建器隐藏键盘中的表情符号选择.

在此输入图像描述

  • 应该注意的是,将键盘类型更改为ASCII Capable也将删除对其他国际键盘的访问. (5认同)
  • 另一个提示:您可以直接从Xcode/Interface Builder设置它. (3认同)
  • 如果从其他文本字段复制表情符号,如果只接受ASCII字符string.canBeConvertedToEncoding(NSASCIIStringEncoding),则应该进行此检查,或者如果只删除表情符号,则可以使用此lib,https://github.com/woxtu/NSString-RemoveEmoji (2认同)

小智 17

这适用于iOS 7和8:

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


Leo*_*eon 11

只是为了面对与我面临同样问题的任何人更新上面的好答案:

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

这就是我们这样做的方式:

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

编辑

好的,如果你想允许某些字符用于其他语言,使用NSASCIIStringEncoding的解决方案是不好的.

一些用NSASCIIStringEncoding阻止的字母:

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

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

我也试过NSISOLatin1StringEncoding:

  • 阻止版本的a:ā
  • 被阻止的版本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))
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我们打电话:

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


dos*_*dos 8

对我有用的解决方案:

self.texField.keyboardType = UIKeyboardTypeASCIICapable;
Run Code Online (Sandbox Code Playgroud)

表情符号键盘将不适用于该KeyboardType.

但是必须检查textField中添加的每个字符的种类,因为用户可以从其他地方复制表情符号,然后粘贴它.

您可以这样做:

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

请注意,正如我在另一篇文章中所读到的,这也可能会阻止用户使用带有特殊字符的键盘,例如中文字符.


Kir*_*air 6

在swift 3.0中

textField.keyboardType = .asciiCapable


Yas*_*edi 6

虽然问题是超级老,我遇到了同样的问题,并且能够通过这个小技巧加载此页面时解决它:

只需在Interface Builder Xcode 8.2.1中选择"ASCII Capable"或"Numbers and Punctuations"

在此输入图像描述 在此输入图像描述

输出为无表情符号键盘= D.

在此输入图像描述

我相信它会帮助某人=)