自定义了一个类MyWindowController,继承自NSWindowController,在使用过程中遇到了几个问题,记录下:
1、一开始以为生成MyWindowController的对象时就会加载xib文件,继而调用windowDidLoad函数,即:
myWindowController = [[MyWindowController alloc] init];
结果没有调用windowDidLoad函数,换成initWithWindowNibName函数初始化对象也还是不行,最后找到原因,调用:
[self.window makeKeyAndOrderFront:nil] 或是 [myWindowController showWindow:self];
这句话后,就调用了windowDidLoad函数,想着应该是显示window时,才会加载xib文件吧
2、假如这里有两行代码
[self.window makeKeyAndOrderFront:nil];
[self test];
这里要注意的是,执行第一行代码时,就会调用windowDidLoad函数,直到windowDidLoad函数结束后,才会执行第二行的代码,顺序就相当于:
— [self.window makeKeyAndOrderFront:nil];
— windowDidLoad函数
— [self test];
3、关闭window可调用Controller的close函数
4、隐藏标题栏,也就是window最上面的,最大化最小化的那一栏,隐藏后最大化最小化会移到下面
self.window.titleVisibility = NSWindowTitleHidden;
self.window.titlebarAppearsTransparent = YES;
self.window.styleMask |= NSWindowStyleMaskFullSizeContentView;
另外,手工创建的NSWindow,关闭后系统会检查这个window有没有controller引用它,有的话就不会释放这个window对象。xib中创建的window则没有这个问题。
但是对于window的释放,系统是特殊处理的,只要关闭就释放了。
本文详细解析了自定义MyWindowController类的使用过程,包括初始化、加载xib文件、调用windowDidLoad函数的时机,以及如何正确显示和关闭窗口。同时介绍了隐藏标题栏的方法和系统对window对象的特殊处理机制。
142

被折叠的 条评论
为什么被折叠?



