更改显示的窗口 (Mac - Cocoa)

Posted

技术标签:

【中文标题】更改显示的窗口 (Mac - Cocoa)【英文标题】:Change what window displays (Mac - Cocoa) 【发布时间】:2012-07-22 10:41:06 【问题描述】:

对不起,如果这是一个非常基本的问题,但我对 XCode 和 Mac 开发一般来说是新手。我想知道如何让一个窗口更改其内容,而不必关闭并打开一个新窗口。例如:

- (IBAction)handlelock:(id)sender 
  [_window orderOut:sender];
  [_loginwindow makeKeyAndOrderFront:sender];
  

但不是关闭_window再打开_login窗口,有没有办法让_window在我点击按钮时显示_login的内容?

【问题讨论】:

【参考方案1】:

或者,只是交换窗口的内容视图:

- (IBAction)handlelock:(id)sender 
     NSView *previousContentView = _window.contentView;
     _window.contentView = _loginwindow.contentView;
     _loginwindow.contentView = previousContentView; // just store it in the other window
 

不过,通常您不需要多个窗口,您只需拥有另一个视图并将其换入即可。

【讨论】:

哈哈,你究竟是如何制作另一个视图的? (对不起,我真的刚刚开始):) @haseo98 最简单的初学者方法是进入 Interface Builder,从调色板中拖入“自定义视图”,然后在您的主类中,创建一个 IBOutlet 并将其连接到该自定义视图,然后您现在可以使用您的 IBOutlet NSView 作为您的“新视图”。【参考方案2】:

有几种方法可以做到这一点。您可以在 xib 文件中有一个单独的视图,其中包含您在登录窗口中想要的内容,然后在您的窗口上调用 setContentView:loginView ,这会将旧视图换成新视图。如果您希望能够切换回原始视图,您可能希望拥有一个指向原始视图的属性。

另一种方法是使用选项卡视图——如果您不喜欢选项卡视图的外观,则有一个看起来不像有选项卡的表格选项卡视图——您将拥有一个视图选项卡,以及另一个选项卡中的登录视图。

【讨论】:

我确信这是一个糟糕的想法是有原因的(这听起来从根本上是错误的),但我正在使用 tables 选项卡视图,因为这听起来最简单。

以上是关于更改显示的窗口 (Mac - Cocoa)的主要内容,如果未能解决你的问题,请参考以下文章

XCode/Cocoa Mac 改变视图

在Mac应用中使用SwiftUI更改动画窗口大小

Cocoa (Xcode 4),从另一个 NIB 更改一个 NIB 上的标签

如何更改 Mac Catalyst 窗口场景中的窗口标题?

在基于文档的 Cocoa 应用程序中避免耦合?

如何在苹果Mac上更改“终端”窗口的颜色光标样式?