gpt4 book ai didi

cocoa - 以编程方式将列(带有绑定(bind))添加到基于 View 的 NSTableView?

转载 作者:行者123 更新时间:2023-12-03 16:05:20 25 4
gpt4 key购买 nike

我有一个简单的应用程序,它在 NSTableView 中列出了一些模型。

该表是一个完全标准的基于 View 的表,有几列,并通过使用绑定(bind)的 NSArrayController 进行填充。所有这些都在 Interface Builder 中设置,并且按预期工作。

现在,我想以编程方式添加更多列,并将这些新列绑定(bind)到模型中的各种键路径。就在那里,我被困住了。

为简单起见,假设以下设置:

  1. Model 对象是只有一个 NSString 属性的普通对象:name
  2. AppDelegate 有一个 NSArray 属性 (models),其中包含许多模型实例。
  3. NSArrayController 的 content 绑定(bind)到应用程序委托(delegate)的 models 数组。
  4. NSTableView 的 content 绑定(bind)到数组 Controller 的 arrangedObjects
  5. 表格的第一列绑定(bind)(在 IB 中)以显示 name 属性,即列 → 表格单元格 View → 静态文本表格 View 单元格 → 绑定(bind)到表格单元格 View 的objectValue.name

据我所知,这是简单明了、照章办事的,而且很有魅力。

但是...那么我该如何添加更多列呢?

以编程方式添加列(为了简单起见,我们假设这个新列应该只显示name属性,就像已经存在的列一样) ,我想我会在应用程序委托(delegate)中执行类似的操作:

NSTableColumn* newColumn = [[NSTableColumn alloc] initWithIdentifier:@"newColumn"];

// do binding magic somehow
// [[newColumn dataCell] bind:NSValueBinding toObject:??? withKeyPath:??? options:nil];

[self.table addColumn:newColumn]; // the table's connected with an IBOutlet

我已经尝试了很多从/到数据单元格、表、列、数组 Controller 、数组本身以及各种键路径的绑定(bind)组合,但没有任何效果。新列添加得很好,但从未填充。

我想我创建的基本 NSTableColumn 实例是基于单元格的,而不是基于 View 的,这会造成麻烦。但是,我不知道如何从这里继续,并且文档从未讨论以编程方式添加的绑定(bind)列。

在这种情况下,我想要的只是一个绑定(bind)到模型的简单文本列,就像我可以轻松设置 IB 的那样。

我可以通过实现 NSTableViewDataSource 并“手动”提供表格来完成这一切,但我已经使用绑定(bind)设置了其他所有内容。

任何帮助将不胜感激。

最佳答案

尝试这样:-

NSString *akey = @"keyValue";
NSString *keypath = [NSString stringWithFormat:@"arrangedObjects.%@",akey];
NSTableColumn *tableColumn=[[NSTableColumn alloc]initWithIdentifier:@"newColumn"];

[tableView addTableColumn:tableColumn];
[tableColumn bind:NSValueBinding toObject:yourArrayController withKeyPath:keypath options:nil];
NSMutableDictionary *dc=[NSMutableDictionary dictionary];
[dc setObject:@"textValue" forKey:@"keyValue"];
[yourmutableArray addObject:dc];
[self setYourmutableArray:yourmutableArray];

请注意:- 您的可变数组应该绑定(bind)到数组 Controller ,然后只有它才会填充数据

关于cocoa - 以编程方式将列(带有绑定(bind))添加到基于 View 的 NSTableView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18542259/

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