使用未知数量的列填充NSTableView

sha*_*rgy 8 xcode cocoa objective-c nstableview

我有一个NSTableview和一个按钮.NSTableview的列数未知.

第一列有一个图像井和2个文本框,其他(同样,未知数字)是普通的文本框列.

该按钮打开文件打开对话框.一旦我选择文件(.jpg),我想处理它们.

到目前为止,所有内容都已制作(选择文件,列等).缺少的是表的填充:

我有循环遍历所有选定的文件.做这个的最好方式是什么:

  • 在第一个单元格的图像井中显示图像,
  • 在第一个单元格的第一个文本框中键入文件名,
  • 在文本框的第二个单元格中键入文件路径,
  • 在所有其他列中键入"YES".

我的困难在于我不知道会有多少列,因为它取决于用户.在运行时期间,列数不会更改.它们是在启动时根据配置设置的.如果配置已更改,则应重新加载应用程序.

我是Objective-C/Cocoa编程的初学者.

编辑:要求的其他信息:

它是基于视图的NSTableView,每列代表一个必须在稍后的图像上拍摄的动作.程序用户可以决定要采取的操作数量和数量,这就是表视图中未知数量的列的原因.

Mon*_*olo 13

您可以使用以编程方式添加列addTableColumn:.此方法采用NSTableColumn您可以在代码中创建的实例.

您的架构的其余部分(显示图像等)并没有特别改变"正常"代码,因为列已经动态添加.

这是一个可以帮助您入门的代码段:

NSTableColumn* tc          = [[NSTableColumn alloc] init];

NSString *columnIdentifier = @"NewCol"; // Make a distinct one for each column
NSString *columnHeader     = @"New Column"; // Or whatever you want to show the user

[[tc headerCell ] setStringValue: columnHeader];
tc.identifier = columnIdentifier;

// You may need this one, too, to get it to show.
self.dataTableview.headerView.needsDisplay = YES;
Run Code Online (Sandbox Code Playgroud)

填充表时,假设模型是对象的数组(in self.model)NSDictionary,它可能会像这样;

- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{

     NSString *columnIdentifier = tableColumn.identifier;

     NSDictionary *rowDict = [self.model objectAtIndex: row];

     NSString *value = [rowDict valueForKey: columnIdentifier]; // Presuming the value is stored as a string 

     // Show the value in the view
}
Run Code Online (Sandbox Code Playgroud)

更多的文档.

  • 那就是问题.. :)如果我不知道有多少列,我怎么能建立一个模型?我不知道我怎么能像上面描述的那样填满桌子..如果它会如此简单,那么id可能有downvotes和答案.. :)但我是初学者也许我只是没有正确解释自己..任何帮助表示赞赏!谢谢 (2认同)