gpt4 book ai didi

cocoa - 使用 NSTreeView 交换 View

转载 作者:行者123 更新时间:2023-12-03 17:04:55 25 4
gpt4 key购买 nike

我已经制作了一个自定义 NSView。基本上,对于我选择的 TreeView 中的每个项目,我想将 View 与另一个 View 交换。

我的问题是,我应该使用 NSArrayController 之类的东西吗?如果是这样,如何连接自定义 NSView 来使用 NSArrayController 并根据 NSTreeView 中的选择在 View 之间交换?

最佳答案

您可以使用 NSArrayController 来执行此操作,但是您必须考虑以下几点:

每个 NSView 应该由 NSViewController 控制,因此您最好在 NSArrayController 中存储一些标识符,您可以从中扣除 Controller 类和关联的 NIB。获得 NSViewController 类名后,您可以实例化它并使用 initWithNibName: 方法加载随附的 View 。

引入“电流 Controller ”的概念可能是个好主意。这样,在任何时候,内存中都只有一个 Controller (具有关联的 View 和模型对象图)。一旦您根据 TreeView 中的选择交换 Controller ,旧 Controller 及其所有关联对象将从内存中释放。

示例:

  • 存储在您的NSArrayController中:@"Customers"
  • Controller 类:@"CustomersViewController"
  • 关联 NIB:@"CustomersView"

通过在数组中存储@"Customers",您可以推断出正确的 Controller 类名称和关联的NIB:

NSString *aControllerName = [anIdentifier stringByAppendingString: @"ViewController"];
NSString *aNibName = [anIdentifier stringByAppendingString: @"View"];
Class aControllerClass = NSClassFromString(aControllerName);
[self setCurrentController: [[aControllerClass alloc] initWithNibName: aNibName bundle: [NSBundle mainBundle]]];

在上面的代码中,anIdentifier 将保存值@"Customers",并且可能源自您的NSArrayController。上面示例中的 self 指的是您的顶级 Controller (其类取决于您的设计)。

实际的 View 交换可以按如下方式完成:

[[self currentController] view] removeFromSuperView];
... do swapping ...
[[self view] addSubview:[[self currentController] view]];

如果您将标识符存储在填充 TreeView 的数据源中,您可能不需要单独的 NSArrayController,因为您可以直接从 TreeView 中的选定对象中获取标识符。

关于cocoa - 使用 NSTreeView 交换 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11748916/

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