【问题标题】:NSWindowController and NSViewControllerNSWindowController 和 NSViewController
【发布时间】:2011-02-20 10:14:12
【问题描述】:

可能是一个非常简单的问题,但我无法理解它。

我想创建某种向导:NSWindow 显示为另一个 NSWindow 的工作表,并且应该依次显示三个不同的 NSViews。

我想我应该创建一个自定义NSWindowController 和三个NSViewControllers,但我不知道如何设置控制器以及如何交换视图。

【问题讨论】:

    标签: objective-c cocoa nswindow nswindowcontroller nsviewcontroller


    【解决方案1】:

    简而言之,您的窗口控制器将实例化三个视图控制器,拥有一个宿主视图,并添加 -[NSView addSubview:] 或删除 -[NSView removeFromSuperView] 视图控制器的视图作为宿主视图的子视图。根据您构建代码的方式,您还可以使用-[NSView replaceSubview:with:] 将子视图替换为另一个。

    Apple 的 View Controller sample code 使用视图控制器进行视图切换。

    【讨论】:

    • 我刚刚注意到contentViewNSWindow。有什么理由不使用它吗?
    • @fabian789 您可以使用contentView 作为主机视图。但是,如果您决定在窗口中放置除子视图之外的其他控件,则将主视图设置为 contentView 的子视图会使事情变得更容易,因为您不必更改交换子视图的代码。
    【解决方案2】:

    @Bavarious asnwer 很好,像我这样的人总是需要良好的 sn-p 代码:

    appDelegate = (AppDelegate*)[[NSApplication sharedApplication] delegate];
    self.masterViewController = [[MasterViewController alloc] initWithNibName:@"MasterViewController" bundle:nil];
    [appDelegate.window.contentView replaceSubview:self.view with:self.masterViewController.view];
    

    我创建了 appDelegate 对象,因为它是从 NSViewController 调用的,否则您可以从 self 获取视图。

    【讨论】:

    • @nitinkachhadiya 这就是我在我的 mac 应用程序中所做的,它对我来说非常有用
    • 不工作,但会发生什么,任何错误,任何崩溃。你做错了,因为这段代码已经过测试
    • home=[[RegistrationViewController alloc] initWithNibName:@"RegistrationViewController" bundle:nil]; [home.view setWantsLayer:YES]; home.view.layer.backgroundColor=NSColorFromRGBWithAlpha(0xcc4941,1.0).CGColor; home.view.frame = self.view.bounds; [appDelegate.window.contentView replaceSubview:self.view with:home.view];
    • appDelegate 没有窗口属性!
    • 仅第一行就足以让我动起来。我没有意识到你可以像这样为 AppDelegate 获得一个单例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多