InterfaceBuilder、xib、NSWindowController学习笔记

InterfaceBuilder、xib、NSWindowController学习笔记

[TOC]

InterfaceBuilder、xib、NSWindowController学习笔记_第1张图片

File's Owner

顾名思义,File‘s Owner代表这个文件的Owner,想要连线,代码的文件必须以一种方式引用在.xib中,File's Owner就是一种方式。指定了File's Owner的.xib文件,就可以连线到对应的File's Owner指定的文件中了。

将File's Owner中的Custom Class 设置为某一个对象后,它的连线检查窗口中就会显示对应的可以连接的内容,如下图是酱FIle's Owner设置为NSApplication后的检查视图

InterfaceBuilder、xib、NSWindowController学习笔记_第2张图片

Objects

也是顾名思义,存放Object,比如拖一个Object到InterfaceBuilder中,然后为这个Object指定CustomClass,这样就可以跟指定的CustomClass进行连线了。

Object的连线检查窗口中会有个Referencing Outlets,这个是指自属于某一个对象,是被引用的关系

InterfaceBuilder、xib、NSWindowController学习笔记_第3张图片

Delegate

一种常用的方法是项目的主xib文件中,FIle's Owner设置为NSApplication,然后拖一个Object到InterfaceBuilder中,再将File'S Owner的delegate连线到object上设置好后就如下图

InterfaceBuilder、xib、NSWindowController学习笔记_第4张图片

再将Delegate的Custom Class 设置为我们的AppDelegate,这样我们的AppDelegate.h AppDelegate.m就生效了,成为了我们应用NSApplication的Delegate(applicationDidFinishLaunching等方法都会回调了),并且我们还可以对它进行连线。

NSViewController

另外一种常用的用法是,拖一个ViewController到Objects中,设置他的Custom Class为我们写的NSViewController,然后将它的View连线到我们想要管理的view上。

xib的加载

新建 windows

使用NSWindowController,写一个类继承NSWindowController,在init中这样写:

- (instancetype)init {
    self = [super initWithWindowNibName:@"xib的名字"];
    return self;
}

然后在对应的xib中也设置这个类为它的File's Owner

然后在需要加载新窗口的地方这样调用:

self.windowController = [[[MyWindowController alloc] init]];
[windowController showWindow:self];

就完成了。

这里要注意一定要保持windowController的引用,像下面的代码窗口是显示不出来的,因为一显示完就被释放了

[[[MyWindowController alloc] init] showWindow:self];

此外也可以用NSBundle来加载:

[NSBundle loadNibNamed:@"xib 的名字" owner:self];

如果 xib 中包含 window,窗口会自动加载显示出来,如果没有包含,加载的 xib 不会显示出来.

NSWindowController

NSWindowController管理一个NSWindow,当NSWindow属于某一个NSWindowController时,它的releasedWhenClosed属性无效。也就是说,调用NSWindow的close方法,或者NSWindowController的close方法时(这种情况关闭window通常使用Controller的close方法),NSWindow的对象并不会销毁。因为这时的NSWindow由NSWindowController控制。

调用NSWindowController的close方法后,如果想要重新显示window,调用showWindow方法可以重新显示,并且原本的状态保留(如输入的文字等)。

那怎么释放不需要的window呢,当NSWindowController的最后一个强引用断开时,window就会被释放,NSWindowController也会被释放

你可能感兴趣的:(InterfaceBuilder、xib、NSWindowController学习笔记)