重新加载NSViewController时,使用文件中的新数据重绘NSTableView?

时间:2011-02-22 17:47:46

标签: nstableview nsviewcontroller loadview

我有一个基于Mac OS X Document的应用程序,它有多个NSViewControllers我可以切换,每个视图根据之前NSViewController的NSTableView中的用户选择显示NSTableViews中plist文件的数据。我遇到的问题是我无法弄清楚每次加载NSViewController时可以调用哪个函数,从文件中读取正确的数据以显示在NSTableView中。对于UIViewControllers,我使用了viewDidLoad,viewWillAppear的函数系列,但是我还没能找到NSViewController的相应函数。

目前我正在使用awakeFromNib,它工作正常,但只是第一次加载NSViewController。我已经尝试过loadView,但这会折叠NSView。我假设我需要做更多设置才能使用loadView。

我正在使用Hillegass的书籍Cocoa Programming for MAC OS X中的View Swapping代码,该代码使用以下代码切换ViewControllers:

  - (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是否已成为第一个响应者?

1 个答案:

答案 0 :(得分:0)

post提供了答案。

我添加了以下代码:

- (void)viewWillLoad {

}

- (void)viewDidLoad {

}

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

并在displayViewController的开头添加了

[vc loadView]