ユーザーがこれを使用できないようにする方法:
質問する
1594 次
1 に答える
1
解決策は、UISearchBarデリゲートメソッドを使用することです。
- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replaceText:(NSString *)text
ユーザーがテキストを入力すると、新しい文字が「text」変数に表示されます。選択範囲がある場合、範囲の長さは0になります。それ以外の場合は、0になります。削除は選択範囲ですが、長さのテキストは0です。
一部の文字が処理されないようにするには、このデリゲートメソッドからNOを返します。凝ったものにしたい場合は、現在のテキスト(searchBar.text)を取得して、「EMOJIIを使用しないでください!」に変更し、dispatch_after()を使用して、1秒ほど後にテキストを古い値にリセットできます。
明らかに、Emojiiのユニコード範囲および/またはブロックしたい他のものを把握する必要があります。
編集:それで私は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キーボードを使用すると、上記の16進値を持つ長さ2のテキストが表示されます。EmojiiはUnicodeの範囲を占めており、グーグルで検索すると多くのことがわかります。
于 2012-08-04T13:47:23.413 に答える