したがって、私はメインウィンドウの代理人を設定する必要があるこの演習をしようとしています。目的は、ユーザーがウィンドウのサイズを変更したときに、常にウィンドウの幅の2倍になるようにすることです。Objective Cメインアプリケーションウィンドウの代理人
これは私のAppController.hファイルです:
#import <Cocoa/Cocoa.h>
@interface AppController : NSObject
{
NSWindow *windowWillResize;
}
@end
と、これは私のAppController.mファイルです:
#import "AppController.h"
@implementation AppController
- (id) init
{
[super init];
windowWillResize = [[NSWindow alloc] init];
[windowWillResize setDelegate:self];
return self;
}
- (NSSize) windowWillResize:(NSWindow *)sender
toSize:(NSSize)frameSize;
{
NSLog(@"size is changing");
return frameSize;
}
@end
しかし、私はライン [windowWillResize setDelegate:自己]を削除することができます。 私はInterface Builderでデリゲートを設定していますが、なぜこれが機能するのか分かりません。
私は完全に新しい windowWillResize = [[NSWindow alloc] init]を行っているので、windowWillResizeはメインアプリケーションウィンドウを参照していることをどのように知っていますか?
私はこれを完全に間違っていると感じています。誰かが私を正しい方向に向けることができますか?ありがとう!
Grahamとmouvicielの両方に感謝します。 NSWindowの作成が間違っていると思われました。 私が知らなかったことは、windowWillResizeが組み込み関数だということでした。 これは私の次の質問です。インターフェースビルダーを使用しなかった場合、私のコードには、appControllerをMainWindowのデリゲートにしたいと思っていますか? – hahuang65
ああ待って、今私は混乱している...どのようにwindowWillResizeは、メインウィンドウを制御する知っている?ヘッダーファイルで宣言しましたが、メインウィンドウにはどこにも接続しません。私はデリゲートとしてappControllerを設定します... windowWillResize関数はどのように実際のサイズ変更にリンクしますか? – hahuang65
インターフェイスビルダーでappControllerをデリゲートとして設定すると、-windowWillResizeをメインウィンドウに接続することができます。ユーザーがメインウィンドウのサイズ変更を要求すると、ウィンドウインスタンスは[delegate windowWillResize:...]というメッセージをdelegate = appControllerのどこに送信します。 – mouviciel