3

NSWindowController を拡張するクラスがあり、それが制御するウィンドウを配置しようとしています。ウィンドウには、予想されるすべてのコンテンツと機能が正しく表示されますが、initWithWindowNibName メソッドで画面上の開始位置を配置しようとすると、位置が変わりません。コードは次のとおりです。

NSPoint p = NSMakePoint(100, 50);
[[self window] setFrameTopLeftPoint:p];

これは非常に単純なようで、何が問題なのかわかりません。

アイデアをありがとう。

(問題が見つかりました。IB のクラスに接続されたウィンドウがありませんでした。)

4

2 に答える 2

3

Wevah は正しいアイデアを持っていますが、少し拡張してみます。

この行をinitWithWindowNibName:メソッドに追加しようとすると、次のようになります。

NSLog(@"window == %@", [self window]);

コンソールに次の出力が表示される可能性があります。

window == (null)

言い換えれば、メソッドはオブジェクトの有効期間の早い段階にあるため、多くの やユーザー インターフェイス項目がまだ完全に「接続」されていないため、ウィンドウはまだ ですnilinit*IBOutlet

にメッセージを送信してnilもまったく問題ありません。単純に無視されます。したがって、基本的にウィンドウを配置しようとしても効果はありません[nil doSomething]

重要なのは、コントローラー オブジェクトの有効期間内の後半でウィンドウの配置を実行することです。ここで、IBOutletやその他のユーザー インターフェイス オブジェクトが適切に接続されます。Wevah がほのめかしたように、物事を適切に接続する方法の 1 つは、

- (void)awakeFromNib;

または の場合はNSWindowController、次のものも同様です。

- (void)windowDidLoad;

お役に立てれば...

于 2010-09-30T04:35:00.507 に答える
1

そのコードを に入れてみてくださいawakeFromNib

于 2010-09-30T00:21:05.830 に答える