gpt4 book ai didi

macos - 如何使用 Cocoa Bindings 实现基于 View 的源列表 (NSOutlineView) 的示例?

转载 作者:行者123 更新时间:2023-12-03 16:02:10 26 4
gpt4 key购买 nike

有没有人找到关于如何使用 Lion 中引入的基于 View 的 NSOutlineView 实现源列表的清晰、简洁的示例或指南?我看过 Apple 的示例项目,但没有任何方向感或解释,我发现很难掌握它们到底如何工作的概念。

我知道如何使用优秀的 PXSourceList 作为后备,但如果可能的话,我真的很想开始使用基于 View 的源列表。

最佳答案

您用 cocoa-bindings 标签标记了它,所以我假设您的意思是“带有绑定(bind)”。我举了一个简单的例子。从 Xcode 中新的非基于文档的 Cocoa 应用程序模板开始。随便你怎么调用它。首先,我添加了一些代码来绑定(bind)一些假数据。我的 AppDelegate header 如下所示:

#import <Cocoa/Cocoa.h>

@interface SOAppDelegate : NSObject <NSApplicationDelegate>

@property (assign) IBOutlet NSWindow *window;

@property (retain) id dataModel;

@end

这是我的 AppDelegate 实现的样子:

#import "SOAppDelegate.h"

@implementation SOAppDelegate

@synthesize window = _window;
@synthesize dataModel = _dataModel;

- (void)dealloc
{
[_dataModel release];
[super dealloc];
}

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
// Insert code here to initialize your application

// Make some fake data for our source list.
NSMutableDictionary* item1 = [NSMutableDictionary dictionaryWithObjectsAndKeys: @"Item 1", @"itemName", [NSMutableArray array], @"children", nil];
NSMutableDictionary* item2 = [NSMutableDictionary dictionaryWithObjectsAndKeys: @"Item 2", @"itemName", [NSMutableArray array], @"children", nil];
NSMutableDictionary* item2_1 = [NSMutableDictionary dictionaryWithObjectsAndKeys: @"Item 2.1", @"itemName", [NSMutableArray array], @"children", nil];
NSMutableDictionary* item2_2 = [NSMutableDictionary dictionaryWithObjectsAndKeys: @"Item 2.2", @"itemName", [NSMutableArray array], @"children", nil];
NSMutableDictionary* item2_2_1 = [NSMutableDictionary dictionaryWithObjectsAndKeys: @"Item 2.2.1", @"itemName", [NSMutableArray array], @"children", nil];
NSMutableDictionary* item2_2_2 = [NSMutableDictionary dictionaryWithObjectsAndKeys: @"Item 2.2.2", @"itemName", [NSMutableArray array], @"children", nil];
NSMutableDictionary* item3 = [NSMutableDictionary dictionaryWithObjectsAndKeys: @"Item 3", @"itemName", [NSMutableArray array], @"children", nil];

[[item2_2 objectForKey: @"children"] addObject: item2_2_1];
[[item2_2 objectForKey: @"children"] addObject: item2_2_2];

[[item2 objectForKey: @"children"] addObject: item2_1];
[[item2 objectForKey: @"children"] addObject: item2_2];

NSMutableArray* dataModel = [NSMutableArray array];

[dataModel addObject: item1];
[dataModel addObject: item2];
[dataModel addObject: item3];

self.dataModel = dataModel;
}

@end

我创建的假数据结构没有特别的意义,我只是想展示一些具有几个子级别的东西,等等。唯一重要的是您在 Interface Builder 行的绑定(bind)中指定的关键路径使用数据中的键(在本例中为假数据。)

然后选择MainMenu.xib 文件。在 IB 编辑器中,执行以下步骤:

  1. 使用对象库 (Ctrl-Cmd-Opt-3) 将 NSTreeController 添加到您的 .xib 中。
  2. 选择 NSTreeController,然后使用属性检查器 (Cmd-Opt-4) 将 Key Paths > Children 设置为 children(对于此示例;对于您的数据,此应该是返回子对象数组的任何内容。)
  3. 在 NSTreeController 仍处于选中状态的情况下,使用绑定(bind)检查器 (Cmd-Opt-7) 将内容数组绑定(bind)到 AppDelegate,模型键路径为 dataModel
  4. 接下来使用对象库 (Ctrl-Cmd-Opt-3) 将 NSOutlineView 添加到您的 .xib 中。
  5. 将其排列在窗口内(通常是窗口的整个高度,与左侧齐平),以达到您满意的程度
  6. 选择 NSOutlineView(请注意,第一次单击它时,您可能已经选择了包含它的 NSScrollView。第二次单击它,您将向下钻取到 NSOutlineView 本身。请注意,这是如果您扩大 IB 编辑器左侧所有对象所在的区域,就会容易得多,这样您就可以将对象视为树,并以这种方式导航和选择它们。)
  7. 使用属性检查器 (Cmd-Opt-4) 设置 NSOutlineView:
    • 内容模式:基于 View
    • :1
    • 突出显示:来源列表
  8. 使用绑定(bind)检查器 (Cmd-Opt-7) 将“内容”绑定(bind)到“树 Controller ”, Controller 键:arrangedObjects(这是基于 View 的 NSTableView/NSOutlineViews 的行为开始与基于 NSCell 的行为不同的地方)
  9. 在对象列表(在 #6 中提到)中,展开 NSOutlineView 的 View 层次结构并选择静态文本 - TableView 单元格
  10. 使用绑定(bind)检查器 (Cmd-Opt-7) 将绑定(bind)到表格单元格 View ,模型键路径:objectValue.itemName (我在假数据中使用了 itemName,您需要使用与数据项名称相对应的键)

保存。运行。您应该看到一个源列表,一旦您展开了带有子节点的节点,您可能会看到如下内容:

enter image description here

如果您加入了 Apple 开发者计划,您应该能够访问 WWDC 2011 Videos 。有一个专门致力于使用基于 View 的 NSTableView(和 NSOutlineView),并且它包含相当全面的绑定(bind)覆盖。

希望有帮助!

关于macos - 如何使用 Cocoa Bindings 实现基于 View 的源列表 (NSOutlineView) 的示例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8090224/

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