- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经制作了一个自定义 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"
@"CustomersViewController"
@"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/
我已经制作了一个自定义 NSView。基本上,对于我选择的 TreeView 中的每个项目,我想将 View 与另一个 View 交换。 我的问题是,我应该使用 NSArrayController 之
我正在尝试将 Bindings 与 NSOutlineView 一起使用。 我看不到如何通过绑定(bind)将“当前选定的项目”连接到其他任何内容 我已经尝试过: 直接使用NSOutlineView,
我是一名优秀的程序员,十分优秀!