Cocoa - 将IBOutlet链接到单独的笔尖

时间:2011-02-17 15:17:15

标签: objective-c cocoa macos nib nswindow

我有一个nib文件,我在其中加载了我的应用程序中的某个点。将NSWindow IBOutlet从我的AppDelegate链接到第二个nib文件的窗口是否合法?换句话说,我的IBOutlet没有连接到Xcode默认创建的MainMenu xib文件。如果这是合法的,我可以访问NSWindow的框架和其他功能吗?

3 个答案:

答案 0 :(得分:6)

是的,你可以这样做。在你的第二个nib文件中,我将使用NSWindowController作为nib的文件所有者。然后在AppDelegate中,创建NSWindowController的一个实例,然后加载nib。从那里,您可以检查NSWindowController拥有的窗口的属性,或者使用窗口执行任何操作。

这是一个例子

@interface MyAppDelegate : NSObject 
{
    NSWindowController *myWindowController;
}

@end

@implementation MyAppDelegate

- (void)applicationWillFinishLaunching:(NSNotification *)aNotification
{   
    myWindowController = [[NSWindowController alloc] initWithWindowNibName:@"MySecondWindow"];

    [[myWindowController window] center];
    [[myWindowController window] makeKeyAndOrderFront:self];
} 

@end

答案 1 :(得分:1)

在第二个笔尖中,将文件所有者设置为您的应用程序委托类。然后根据需要在IB内安装插座。在运行时,请致电[NSBundle loadNibNamed:owner:]并确保将自己作为所有者传递。

答案 2 :(得分:0)

是的,只要App Delegate是您正在加载的笔尖的文件所有者,这将是合法的。也就是说,如果稍后卸载nib,则必须确保nib中的所有顶级对象都已正确释放(否则会造成内存泄漏)。