gpt4 book ai didi

objective-c - 如何在 cocoa macosx 中以编程方式创建 View

转载 作者:行者123 更新时间:2023-12-03 17:15:28 26 4
gpt4 key购买 nike

我在 nib 文件“MyNib”中创建了一个 View “MyView”我的问题是如何使用 View 名称创建 NSView 对象

我的 WindowController 有一个自定义类。使用 Interface Builder 我无法在 mywindowController 类中创建 socket 。

因此,如果无法使用界面生成器创建 socket ,那么创建 NSVIew 的其他方法是什么。

提前致谢

最佳答案

您读过documentation吗? ?当您加载 nibs/xibs 时,您必须指定文件的所有者(xib 中的顶级对象)。这意味着您作为所有者传入的任何对象都必须具有所需的导出。

BOOL success = [NSBundle loadNibNamed:@"MyNib" owner:selfOrSomeControllerWithOutlets];

这是加载 xib 内容并将其连接到您指定的任何所有者的最简单方法。

您还可以创建一个 Controller 实例并一次性加载其 xib。例如, View / View Controller 可能由主窗口 Controller 加载。在窗口 Controller 内部,您可能有一个 -widgetView (在 WidgetView.xib 中加载 View )方法来执行以下操作:

- (NSView *)widgetView
{
if (!_widgetViewController)
_widgetViewController = [[MyWidgetViewController alloc] initWithNibName:@"WidgetView" bundle:nil];
return [_widgetViewController view];
}

在本例中,MyWidgetViewController 是一个 NSViewController 子类(它赋予它一个 -view 属性,该属性链接到 xib 中的某些顶级 View 。在 xib 中,文件所有者的类名设置为 MyWidgetViewController ,其 View 导出为连接到您的主容器 View 。当使用 xib 成功初始化 Controller 时,-view socket (以及您的子类拥有的任何其他 socket )将重新连接,现在该 Controller 已连接到 xib 内容。

现在,第一次请求 -widgetView 时,它会加载 xib 并返回 View (或 nil)。随后的每个调用都只会交回已加载的 View 。这称为“延迟加载”,通常是获取不总是使用的 View 的最佳方法。您也可以对多个“副本”执行此操作。只需在创建每个 View Controller 时将其添加到容器中的某个位置,并根据需要进行管理即可。

当然,上面的代码忽略了无法找到 xib 的可能性(在这种情况下 -initWithNibName:bundle: 将返回 nil),您不应该这样做。一定要使用 NSAssert...() 处理错误并正常终止(因为如果找不到 xib,应用程序包可能会出现问题)。

关于objective-c - 如何在 cocoa macosx 中以编程方式创建 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8040343/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com