0

複数のNSViewControllerを切り替えるMacOSXドキュメントベースのアプリがあり、各ビューは、以前のNSViewControllerのNSTableViewでのユーザー選択に基づいてNSTableViewsのplistファイルからのデータを表示します。私が抱えている問題は、NSViewControllerがロードされるたびに、ファイルから正しいデータを読み取ってNSTableViewに表示するために、どの関数を呼び出すことができるかを理解できないことです。UIViewControllersには、viewDidLoadの関数ファミリーviewWillAppearを使用しましたが、NSViewControllerに対応する関数を見つけることができませんでした。

現在、私はawakeFromNibを使用しています。これは正常に機能しますが、NSViewControllerが初めてロードされるときのみです。loadViewを試しましたが、NSViewが折りたたまれます。loadViewを使用するには、さらにセットアップを行う必要があると思います。

私は、Hillegassの本Cocoa Programming for MAC OSXのViewSwappingコードを使用しています。これは、ViewControllerを次のコードに切り替えます。

  - (void)displayViewController:(ManagingViewController *)vc
                   curBox: (NSBox *)windowBox

  {
// End editing
NSWindow *w = [windowBox window];
BOOL ended = [w makeFirstResponder:w];
if (!ended) {
    NSBeep();
    return;
}
NSView *v = [vc view];

NSSize currentSize = [[windowBox contentView] frame].size;

NSSize newSize = [v frame].size;

float deltaWidth  = newSize.width  - currentSize.width;
float deltaHeight = newSize.height - currentSize.height;

NSRect windowFrame = [w frame];
windowFrame.size.height += deltaHeight;
windowFrame.origin.y -= deltaHeight;
windowFrame.size.width += deltaWidth;

[windowBox setContentView:nil];
[w setFrame:windowFrame
    display:YES
    animate:YES];

[windowBox setContentView:v];

// Put the view controller in the responder chain

[v setNextResponder:vc];
[vc setNextResponder:windowBox];
 }

NSViewコントローラーをレスポンダーチェーンに配置します。

NSViewControllersを交換するたびにビューを設定するために呼び出すことができる関数はありますか?NSViewControllerがfirstResponderになったことを確認できますか?

4

1 に答える 1

0

この投稿は答えを提供しました。

次のコードを追加しました。

- (void)viewWillLoad {

}

- (void)viewDidLoad {

}

- (void)loadView {
[self viewWillLoad];
[super loadView];
[self viewDidLoad];
}

そしてdisplayViewControllerの始めに私は追加しました

[vc loadView]
于 2011-03-03T13:26:05.807 に答える