加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – (Cocoa)在单个窗口可可应用程序中,UIViewControl

发布时间:2020-12-16 03:26:43 所属栏目:百科 来源:网络整理
导读:在搞笑iOS应用程序之后,我以为我会给可可应用一个旋转,假设事情会非常相似.所以我有一个单独的窗口应用程序与分割视图和一些NSTableViews(认为iTunes),我正在寻找一个地方放置我的代码,将从网络获取数据填补表. 在iOS中,我将把它放在适当的UIViewController
在搞笑iOS应用程序之后,我以为我会给可可应用一个旋转,假设事情会非常相似.所以我有一个单独的窗口应用程序与分割视图和一些NSTableViews(认为iTunes),我正在寻找一个地方放置我的代码,将从网络获取数据填补表.

在iOS中,我将把它放在适当的UIViewController子类的viewDidLoad方法中.然后,UITableViewDataSource将访问此数据以填充其单元格.

现在我有一个NSWindow,我可以做一个类似的事情,但如何做一个NSWindowController呢?这甚至是我想要的吗?我可以把它放在AppDelegate中,但似乎不对.

解决方法

iOS和OS X之间的区别是,iOS中只有一个窗口,但OS X中可以有多个窗口.OS X中的NSViewController与UIViewControllers不同,NSViewController用于加载和处理单个视图,而UIViewControllers(对于我相对缺乏iOS知识)似乎处理多个视图,并提供更多的视图之间的粘合.

即使是Apple docs写道:

In Mac OS X,AppKit view controllers are assistants to the window
controller,which is ultimately responsible for everything that goes
in the window.

因此,OS X中的UIViewController的对应者不是NSViewController,而是NSWindowController,它通过管理单个窗口的整体以及视图的布局/内容/交互来为OS X提供了许多UIViewController对iOS的功能.

在你的情况下,我会使用一个NSWindowController – 尽管应用程序很简单,App代表也是如此.如果应用程序非常复杂,那么使用NSViewController来分割代码就不是一个坏主意.

使用NSWindowController的最佳方式是使用[[CustomWindowController alloc] init]在App Delegate中编程加载它,

@implementation CustomWindowController
- (id)init
{
    self=[super initWithWindowNibName:@"CustomWindowNibName"];
    if(self)
    {
        //perform any initializations
    }
    return self;
}
@end

或打电话

[[CustomWindowController alloc] initWithWindowNibName:@"CustomWindowNibName"];

直接(并覆盖initWithWindowNibName)如果您希望它可重用.

并且您可以删除MainMenu.xib中的默认窗口.

一般来说,NSWindowController管理一个在其自己的nib文件中实例化的窗口. NSWindowController通常拥有该nib文件. (虽然可以让它管理一个编程方式创建的窗口,但通常不是这样做的)

为了能够使用自定义的NSWindowController,您需要在单独的nib / xib文件中使您的窗口被管理. (使用默认的xib文件意味着您允许Cocoa自动实例化一个NSWindowController,没有机会进行子类化;您不能使用默认的NSMainNibFile定制的NSWindowController.对于一个简单的应用程序,只需将所有控制器代码放在NSApplication / App Delegate中)

至少在Xcode 4中,该过程涉及使用窗口模板和自定义的NSWindowController类创建一个xib,根据这个nib在-init或其中调用[CustomWindowController showWindow:self]实例化CustomWindowController类; (或者如果这不工作,-makeKeyAndOrderFront :)来获取窗口实际显示(in – (void)applicationDid / WillFinishLaunching:(NSNotification *)aNotification可能是一个不错的地方).

要停止默认窗口显示,我只是删除它.可能有更好的方法,但我不知道.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读