我可以将表编程为表格

时间:2010-01-21 04:11:44

标签: objective-c cocoa tableview

我可以创建一个表(TableView)并让它显示三列的值: - Col1,Col2,Col3在这三列下有N个值吗?

Col1 Col2 Col3
Value1 Value1 Value1
Value2 Value2 value2
Value3 value3 value3
...... ...... ...... ...... ...... ...... Valuen Valuen Valuen

我现在无法看到如何编写MutableDictionary和/或MutableArray来执行此类操作。

我是可可程序和Objective-c的新手。我可以查看点代码的任何样本吗?

我将不胜感激。

3 个答案:

答案 0 :(得分:4)

Matt B.的答案在技术上是正确的,但我会说,对于那些“新的可可编程和目标-c”的人来说,绑定最初可能太难以接受。 (哎呀,我已经做了2年的Cocoa东西了,我刚刚开始掌握它们)

我要说的首先要理解的是the delegate pattern。这种模式在Cocoa框架中经常使用,并且要用对象手动填充NSTableView,您需要了解它。

基本思想是NSTableView知道如何绘制,而不是要绘制的。所以我们要做的是给NSTableView一个“委托”对象,并且tableview询问委托有多少行,每行有什么等等。

委托对象本身是一个对象,它知道应该在tableview中进行什么,而不是如何绘制它。它符合NSTableViewDataSource协议(相当于Java“接口”)。这样NSTableView就有了一套标准的方法,可以用来查询代表并询问它所需要的信息。

答案 1 :(得分:2)

  

我现在无法看到如何编写MutableDictionary和/或MutableArray来执行此类操作。

字典对你来说完全无用。

您需要在表格中列出要an object that models的内容。每行对应于这些对象中的一个,您最有可能将它们保存在一个数组中。列对应于模型对象的属性。

最常见的例子是人员清单(例如员工)。表视图中的每一行都显示一个Person对象。每列显示该对象的一个​​属性:名字,姓氏,可能是公司名称,电话号码等。两种绑定和the table view data source protocol都设计为以这种方式最好地工作(即,最容易)。

您可能想要传递实现模型对象并只编写并行数组或其他内容。只要您使用数据源,可以执行此操作,但不要陷入此陷阱 - 它会阻止您稍后切换到Bindings,它会将属性公开给AppleScript(您不能使三个数组看起来像一个属性,这是不可能的,它使得开发UI超出单个表视图更多更难。

可可是围绕Model-View-Controller设计的;通过提供模型,您可以更轻松地找到Cocoa中的所有内容。

(不,字典不足以作为模型对象。它对AppleScript或Bindings没有帮助,而且当你想让模型对象比只有一个盒子更聪明时它也会让你失望简单的键值属性。衍生的属性,行为和自定义初始化器在字典上实现时最好都是丑陋的黑客。)

答案 2 :(得分:1)

您在此处的关键字是绑定。 Cocoa绑定起初看起来有点像伏都教,但它是将数组内容暴露给表视图的事实上的方式。一旦掌握了它,这绝对是非常了不起。

谷歌搜索NSTableView bindings tutorial会显示大量页面。 This tutorial from CocoaDevCenter非常好(就像他们的大多数东西一样 - 绑定是一个高级主题,他们早期的一些指南也可能有用)。

Apple's docs有点密集,但也可能有用。