Tij*_*Kez 8 cocoa objective-c nswindowcontroller
在搞乱iOS应用程序之后,我想我会给一个Cocoa应用程序一个旋转假设事情会非常相似.所以我有一个单独的窗口应用程序,有一个拆分视图和一些NSTableViews(想想iTunes),我正在寻找一个放置我的代码的地方,这些代码将从网络中获取数据以填充表格.
在iOS中,我将它放在viewDidLoad适当的UIViewController子类的方法中.然后,UITableViewDataSource将访问此数据以填充其单元格.
现在我有一个NSWindow我可以做类似的事情,但我该怎么做NSWindowController呢?这甚至是我想要的吗?我可以把它放进去,AppDelegate但似乎不对.
Ver*_*ous 11
iOS和OS X之间的不同之处在于,只有一个窗口在iOS中,但有可能在OS X多NSViewControllers比OS X工作方式不同UIViewControllers,该NSViewController设计加载和处理的单一视图,而UIViewControllers我相对不足(道歉iOS知识)似乎处理多个视图,并提供更多的视图之间的粘合剂.
甚至Apple的文档也写道:
在Mac OS X中,AppKit视图控制器是窗口控制器的助手,它最终负责窗口中的所有内容.
因此,UIViewControllerOS X中的对应物不是NSViewController,而是通过管理整个单独窗口以及其中的视图的布局/内容/交互NSWindowController,确实为OS X提供了很多UIViewController用于iOS的功能.
在你的情况下,我会使用NSWindowController- 虽然如果应用程序非常简单,App Delegate也可以使用; 如果应用程序非常复杂,那么使用a NSViewController来拆分代码并不是一个坏主意.
做使用,最好的办法NSWindowController是使用编程方式加载它在App代表[[CustomWindowController alloc] init]和
@implementation CustomWindowController
- (id)init
{
self=[super initWithWindowNibName:@"CustomWindowNibName"];
if(self)
{
//perform any initializations
}
return self;
}
@end
Run Code Online (Sandbox Code Playgroud)
或者打电话
[[CustomWindowController alloc] initWithWindowNibName:@"CustomWindowNibName"];
Run Code Online (Sandbox Code Playgroud)
如果您希望它可以重用,请直接(并覆盖initWithWindowNibName).
您可以删除MainMenu.xib中的默认窗口.
从根本上说,NSWindowController通常管理在其自己的nib文件中实例化的窗口.NSWindowController通常拥有该nib文件.(虽然可以让它管理一个以编程方式创建的窗口,但通常不会这样做.)
因此,为了能够使用自定义NSWindowController,您需要在单独的nib/xib文件中进行窗口管理.(使用默认的xib文件意味着你允许Cocoa自动实例化NSWindowController而没有子类化的机会;你不能使用NSWindowController默认NSMainNibFile 的自定义.对于一个简单的应用程序,只需将所有控制器代码放在NSApplication/App Delegate中)
至少在Xcode 4中,该过程涉及使用窗口模板和自定义NSWindowController类创建一个xib,CustomWindowController在-init或者任何地方基于该nib 实例化该类,然后调用[CustomWindowController showWindow:self];(或者如果这不起作用-makeKeyAndOrderFront:),以获取窗口实际显示(- (void)applicationDid/WillFinishLaunching:(NSNotification *)aNotification可能是一个不错的地方).
要停止显示默认窗口,我只需将其删除即可.可能有更好的方法,但我不知道.
| 归档时间: |
|
| 查看次数: |
4943 次 |
| 最近记录: |