最後に、NSTokenField が追加したいくつかの UI の外観のため、NSTokenField を使用しました。しかし、私が思いついた追加のトリック (以下) は、NSTextField でも機能する可能性があると思います。申し訳ありませんが、これは複雑です。
簡単に言えば、私が行ったことは、キーが NSTokenField の部分文字列の完全な補完であり、オブジェクトが補完文字列が表すカスタム オブジェクトである NSMutableDictionary (iVar) を生成することでした。つまり、カスタム補完文字列を生成し、それらを NSTokenFieldDelegate メソッドから返されるように NSArray に入れるtokenField:completionsForSubstring:indexOfToken:indexOfSelectedItem:
とき、同時に、これらの補完のそれぞれとそれらが表すオブジェクトを、補完をキーとして NSMutableDictionary に詰め込みます。そしてオブジェクトを値として。
ユーザーが完了を「トークン化」すると (Return または Tab を押すことで -- トークン化する characterSet を変更したので、トークン化するのはこれだけです)、NSTokenFieldDelegate メソッドtokenField:representedObjectForEditingString:
が呼び出されます。その中で、キーとして editString パラメーターを使用して、NSMutableDictionary からオブジェクトを取得できます。[dict objectForKey:editingString]
controlTextDidChange:
辞書のトリックを使用して NSTokenField の代わりに NSTextField の補完で同じことを行うために、NSTextFieldDelegate メソッドでいくつかの論争を行うことは可能かもしれないと思いますが、それを行うには、完全な補完が必要になると思いますNSTextField で、stringValue を取得し、それをキーとして使用します。私の場合、テキスト フィールド全体を補完する必要はなかったので、NSTokenField のトークン化がうまく機能しました。