0

ユーザーがこれを使用できないようにする方法:

ここに画像の説明を入力してください

4

1 に答える 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 に答える