【问题标题】:Show more than one Object in a NSTableView row在 NSTableView 行中显示多个对象
【发布时间】:2010-01-03 12:15:05
【问题描述】:

我是 stackoverflow 的新手 :) 但我认为,这是问我问题的正确地方。 我是 Cocoa 和 Objective-c 的新开发人员,我正在尝试编写我的第一个 Mac 应用程序:ToDo 应用程序。

此时,我可以保存 ToDo 并删除它们,但现在,我想添加一些功能,例如 CreationDate、一些标签(在 mutablearray 中)以及 ToDo 是否完成。我没有使用 ArrayController,我将编码的 NSMutableArray 保存到文件(库/应用程序支持/AppName)中并从那里读取它。

这一切都必须在一行中,因为它看起来像这样:

Current appearance http://img683.imageshack.us/img683/7595/bild2ss.png

Title 所在的位置应该是 ToDo 的内容,蓝色框所在的位置应该是状态(蓝色 = 撤消,灰色 = 完成),Subtitle 所在的位置应该是日期和标签 (03.01.2009 -标签1,标签2,标签3)

我现在如何将对象添加到可变数组中,但是,如果我想将所有这 4 个信息保存到这个数组中,我不知道如何制作。

我有一个模型,它正在使用这 4 个信息进行初始化,但是如何保存呢?我必须将这个信息保存在一个数组中,并将这个数组保存在我的 mutablearray 中吗?

【问题讨论】:

    标签: objective-c cocoa nsmutablearray nsarray nstableview


    【解决方案1】:

    解决方案实际上是相反的:每行有一个一个对象。

    这是您的模型层(MVC 中的 M)出现的地方:每一行的对象是一个 model object,这是您构造的类的一个实例,图标、标题和副标题是那个对象。

    然后,为您的表格列创建一个custom cell,以这种方式显示模型对象。单元格是视图层的一部分——MVC 中的 V。

    MVC 中的 C 位于模型和视图之间:它是拥有模型的对象,并且是表视图的数据源(无论是否通过绑定)。表格视图从此对象获取模型对象以将它们提供给单元格。这个中间对象是一个控制器。

    【讨论】:

    • 您不一定需要为此创建自定义单元格。您可以使用标题和副标题的属性字符串并使用 NSImageCell 作为状态。
    • 是的,但是将三个单独的属性值填充到单个属性字符串中是一种肮脏的方法。以这种特定方式显示它们是一项 View 工作,而伪造 NSAttributedString 来完成它必须在 Controller 或 Model 中发生——这两个代码部分不应该关心显示。
    • 感谢您的帮助,现在我正在使用数组控制器,并且我有 4 列 :) 我正在努力让这个工作......
    • 我没有说得更远。我有 3 列(1. 内容 2. 日期 3. 状态),我可以编辑这 3 列,但现在,我只想在一行中显示它们(见上图)。这个怎么做?现在我正在使用 ArrayController 因为这更容易更好地理解,并且我像以前一样将它保存在 Document 中。我现在该怎么办?有没有示例代码?比它更容易理解......顺便说一句,谢谢彼得霍西和克里斯苏特:)
    • 我没有表达清楚;抱歉:您需要将其设为 one 列。然后,正如我上面所说,使用模型对象作为列中的值,并为列提供一个自定义单元格,以按照您在问题中显示的方式显示模型对象。 [编辑以澄清说明]
    【解决方案2】:

    现在我有了!

    我只有一个带有 ArrayController 的内容单元。

    我正在为每一行使用 -(id)init 设置其他信息。

    有 3 个对象:内容、状态和日期,对于每个状态,我都会显示另一个图像(完成、撤消、...)。

    非常感谢您的帮助!我正在努力为所有人完成 Beta 版:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多