NSTextField を含む NSPopover を表示する NSStatusItem がありますが、テキスト フィールドは編集できませんが、Xcode ではそうです。現在、これは既知のバグであり、誰かがここに投稿した解決策があるようです。私は本当にこのバグを回避する必要があります。
便宜上、ここで答えを引用します。
主な問題は、キーボード イベントの動作方法です。NSTextField (および彼のすべてのスーパービュー) はキーボード イベントを受け取りますが、彼は何もしません。これは、ポップオーバーがアタッチされているビューが、キー ウィンドウにならないウィンドウにあるために発生します。そのウィンドウにアクセスすることはできません。少なくとも私にはできませんでした。したがって、解決策は、カテゴリを使用して、アプリケーション内のすべての NSWindow に対してメソッド canBecomeKeyWindow をオーバーライドすることです。
NSWindow+canBecomeKeyWindow.h
@interface NSWindow (canBecomeKeyWindow)
@end
NSWindow+canBecomeKeyWindow.m
@implementation NSWindow (canBecomeKeyWindow)
//This is to fix a bug with 10.7 where an NSPopover with a text field cannot be edited if its parent window won't become key
//The pragma statements disable the corresponding warning for overriding an already-implemented method
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wobjc-protocol-method-implementation"
- (BOOL)canBecomeKeyWindow
{
return YES;
}
#pragma clang diagnostic pop
@end
これにより、ポップオーバーが完全にレスポンシブになります。canBecomeKeyWindow に NO と応答する別のウィンドウが必要な場合は、いつでもサブクラスを作成できます。
私は自分が何をすべきかを本当に理解していません。これらの 2 つのファイル NSWindow+canBecomeKeyWindow (.h および .m) を作成するだけで済みますか? それは私にはうまくいかないからです。
これについてはよくわかりませんが、NSPopover を表示する NSWindow を実際に使用している場合にのみ機能しますか? NSWindow を使用していませんが、NSTextField を編集可能にするにはどうすればよいですか?
ありがとう。