我有一个基于 Mac OS X 文档的应用程序,它有多个 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 控制器放入响应者链中。
每次交换 NSViewController 时,是否可以调用一些函数来设置视图?我可以检查 NSViewController 是否已成为 firstResponder 吗?