0

トークンがクリックされたときにトークンNSPopoverからを表示しようとしています。NSTokenField

これらのトークンにはメニューを表示する方法が組み込まれているため、設計の観点からは、そのアクションと同じです。

ただし、トークンがクリックされたときに任意のコードを実行する (良い) 方法はないようです。

何とかコードを に滑り込ませました- tokenField:menuForRepresentedObject:、エレガントとはほど遠いものです。

トークンがクリックされたときにコードを実行する唯一の方法であると仮定すると- tokenField:menuForRepresentedObject:、まだ別の問題があります。NSRectトークンを表す を取得して、トークンとNSPopoverの視覚的な関係を維持できるようにすることです。文字列をジャグリングしたり、トークンが最初に来る方法を理解したりしようとしましたが、信頼性が低く、文書化されていない方法が必要です。

結論:NSPopover選択したトークンのを で表示するにはどうすればよいNSTokenFieldですか?

4

3 に答える 3

1

私はそれができないと思います(ここで私の努力を見てください)。問題は、個々のトークンが、ポップオーバーに接続するためにその境界を参照できるような方法で公開されていないことです。

于 2012-04-24T00:20:02.977 に答える
1

これが私がやったことです。私はNSTokenField、この機能が組み込まれたオープンソースの代替案に取り組んでいます。

// in an NSWindowController
- (NSMenu *)tokenField:(NSTokenField *)tokenField menuForRepresentedObject:(id)representedObject
{
    NSRect displayRect = NSMakeRect(([NSEvent mouseLocation].x - 2.5),
                                    ([NSEvent mouseLocation].y - 2.5),
                                    5, 5);
    displayRect = [self.window convertRectFromScreen: displayRect];


    // establish popover from displayRect ...
}

非常にハッキングされているように感じますが (そして時折 1px オフになります)、かなり見栄えがします

于 2012-04-24T00:37:43.990 に答える