阻止用户在我的应用中使用表情符号微笑

时间:2012-08-04 05:36:07

标签: iphone ios xcode

如何阻止用户使用它:

enter image description here

1 个答案:

答案 0 :(得分:1)

解决方案是使用UISearchBar委托方法:

  • (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text

当用户输入文本时,新字符出现在“text”变量中。如果有选择,则范围具有长度,否则为0.删除是一个选择但是长度为0的文本。

要防止某些字符被处理,您将从此委托方法返回NO。如果你想获得花哨,你可以获取当前文本(searchBar.text),将其更改为“DO NOT USE EMOJII!”,然后使用dispatch_after()然后在1秒左右后将文本重置为旧值。

显然你需要弄清楚Emojii的unicode范围和/或你想要阻止的任何其他东西。

编辑:所以我对Emojii做了更多的研究,这就是委托方法中发生的事情:

- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
    for(int i=0; i<[text length]; ++i) {
        NSLog(@"UNICHAR = %x", [text characterAtIndex:i]);
    }
    unichar c = [text length] == 1 ? [text characterAtIndex:0] : (unichar)'?';
    NSLog(@"Text: %@ unichar=%C (hex=%x)", text, c, c);

    return YES;
}

点击Emojii字符可以获得此输出:

2012-08-05 10:09:21.121 Searcher[563:707] UNICHAR = d83d
2012-08-05 10:09:21.130 Searcher[563:707] UNICHAR = de28
2012-08-05 10:09:21.135 Searcher[563:707] Text:  unichar=? (hex=3f)
2012-08-05 10:09:22.031 Searcher[563:707] UNICHAR = d83d
2012-08-05 10:09:22.035 Searcher[563:707] UNICHAR = de28
2012-08-05 10:09:22.040 Searcher[563:707] Text:  unichar=? (hex=3f)
2012-08-05 10:09:22.703 Searcher[563:707] UNICHAR = d83d
2012-08-05 10:09:22.709 Searcher[563:707] UNICHAR = de28
2012-08-05 10:09:22.715 Searcher[563:707] Text:  unichar=? (hex=3f)
2012-08-05 10:09:31.964 Searcher[563:707] UNICHAR = d83d
2012-08-05 10:09:31.969 Searcher[563:707] UNICHAR = de22
2012-08-05 10:09:31.973 Searcher[563:707] Text:  unichar=? (hex=3f)

很明显,当你使用Emojii键盘时,你会得到长度为2的文本,上面的十六进制值。 Emojii占据了一系列Unicode,如果你谷歌,你会发现很多。