1

デリゲート メソッドNSTokenFiledを介して挿入されたトークンを検証する があります。-tokenField:shouldAddObjects:atIndex:残念ながら、このメソッドは、ユーザーがトークン化文字を押したときにのみ呼び出されます。ユーザーがコントロールの外側をクリックすると、esc または tab が押され、未完成の文字列が検証メソッドを呼び出さずに自動的にトークンに変換されます。

-control:isValidObject:Google に尋ねたところ、問題が既知であり、stackoverflow の誰かがデリゲート メソッドをオーバーライドして残りの文字列を検証するよう提案したことに気付きました。

残念ながら、このメソッドに渡されるオブジェクトはNSMutableString、トークン フィールドに既に挿入されているすべてのトークンの非表示の文字を持つ です。おそらくこれは、ココアがトークンを表示する場所を追跡する方法です。

私の質問は、これらの不正な文字を削除するにはどうすればよいですか?

これまでのところ、私はこれらを試しました:

NSString *newString = [NSString stringWithUTF8String:[stringWithInvisibleCharcters UTF8String]];

NSString *newString = [stringWithInvisibleCharacters stringByTrimmingCharactersInSet:[NSCharacterSet illegalCharacterSet]];

NSString *newString = [stringWithInvisibleCharacters stringByTrimmingCharactersInSet:[NSCharacterSet controlCharacterSet]];

成功しませんでした。最後の 2 つは、トークン文字が最初と最後にある場合にのみ機能することを知っていますが、これまでのところ私の場合です。

編集:

文字をログに記録するのに役立つ場合

NSLog(@"%hu",[(NSMutableString *)object characterAtIndex:0]);

65532 を返します。

4

2 に答える 2

10

65532 に関連付けられた文字は、「オブジェクト置換文字」として知られています。これは、その getter を使用して NSCharacterSet が処理する Unicode 範囲の範囲外にあるようです。あなたが言ったように、NSTokenFieldはそれをトークン間の区切り文字として使用しています。それを取り除くためのこのようなものはうまくいくはずです:

NSCharacterSet *characterset=[NSCharacterSet characterSetWithCharactersInString:@"\uFFFC"];
NSString *newString = [str stringByTrimmingCharactersInSet:characterset];
于 2013-03-15T05:38:10.190 に答える
3
NSString *str;  
NSCharacterSet *characterset=[NSCharacterSet characterSetWithCharactersInString:@"<>"];  
str = [str1 stringByTrimmingCharactersInSet:characterset];`
于 2013-03-15T05:29:53.220 に答える