NStopFieldを含むNSPopoverを表示するNSStatusItemがありますが、テキストフィールドは編集可能ではありませんが、Xcodeでもそうです。これは既知のバグで、明らかに誰かが投稿した解決策があります。here私は本当にこのバグを回避する必要があります。NSStatusItem with NSPopoverとNSTextField
私は便宜のためにここに答えを引用します:
主な問題は、キーボードイベントが動作する方法です。 NSTextField(および彼のすべてのスーパービュー)はキーボードイベントを受け取るが、何もしない。これは、ポップオーバーがアタッチされているビューがキーウィンドウにならないウィンドウにあるために発生します。そのウィンドウにはアクセスできません、少なくとも私はできませんでした。したがって、ソリューションは、カテゴリーを使用するアプリケーションのすべてのNSWindowのメソッドcanBecomeKeyWindowをオーバーライドします。ポップオーバーが完全にresposiveなり
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と応答しなければならない別のウィンドウが必要な場合は、いつでもサブクラスを作成できます。
私は何をすべきか分かりません。 NSWindow + canBecomeKeyWindow(.hと.m)の2つのファイルを作成するだけですか?それは私のために働かないので。
これはわかりませんが、NSPopoverを表示しているNSWindowを実際に使用している場合にのみ動作しますか?私はNSWindowを使用していません。どうすればNSTextFieldを編集可能にすることができますか?
ありがとうございました。
お返事ありがとうございます。私はAppleがすぐにこれを修正することを願っています私も代替案を探しましたが、将来的に他の人たちが永遠にアップデートしないかもしれないので、Appleのコードに頼っています。 – iMaddin