cocoadevは、独自のNSWindow
サブクラスを実装するのに最適な方法についてさらに詳しく説明します。ほとんどの一般的な落とし穴の説明があります。
それの要旨はNSWindow
のサブクラスを作成することで、initメソッドでNSBorderlessWindowMask
にそのstyleMask
を設定する:あなたはおそらくあなたの窓の振る舞いをするためにcanbecomeKeyWindow
にYESを返す必要があります
- (id) initWithContentRect: (NSRect) contentRect
styleMask: (unsigned int) aStyle
backing: (NSBackingStoreType) bufferingType
defer: (BOOL) flag
{
if ((self = [super initWithContentRect: contentRect
styleMask: NSBorderlessWindowMask
backing: bufferingType
defer: flag]) == nil) { return nil; }
[super setMovableByWindowBackground:YES];
[super setLevel:NSNormalWindowLevel];
[super setHasShadow:YES];
// etc.
return self;
}
注意を通常のウィンドウのように。
- (BOOL) canBecomeKeyWindow
{
return YES;
}
あなたは、その後、カスタムNSViewのサブクラスを作成したクラスのインスタンスでウィンドウ全体を満たし、かつ、そのカスタムビュー内から描画適切なウィンドウのすべてを実行することができます。
すべてが少し痛いことがあります。右下隅をドラッグしてサイズを変更するなど、通常のウィンドウ動作のほとんどを再実装する必要があります。
ありがとう、Leibowitzn。 NSTextFieldを設定する方法についてさらに詳しく説明できますか?どのようにフレームをフレーム内に適切に配置するようにフレームを設定するのですか?そして、私のコードのどこでこれを行うのが最適な場所ですか? – sam
FWIW、私はアプリコントローラーのawakeFromNibメソッドでそれを行いました。私はテキストフィールドのフレームをウィンドウのフレームに合わせて配置しました。これはおそらく最善の方法ではありませんが、ウィンドウがいつ/メインウィンドウを終了し、テキストの色を変更するために使用されたかを知るために通知を使用しました。アイデアをもう一度ありがとう。 – sam