如何在Cocoa中实现自定义列表?

时间:2009-08-10 10:13:23

标签: cocoa webview nstableview nscollectionview

我想构建一个Cocoa App,其中的条目列表与Things.app(see the screencast)的ToDo列表非常相似。问题是我是否应该使用

  1. 一个TableView,
  2. 一个CollectionView或
  3. 一个WebView。
  4. 我认为它可以与所有这些一起使用,但哪一个最符合以下要求?

    • 有一个条目列表 - > 1列&很多行
    • 使用drag& amp;重新排序降
    • 选择单个条目&使用键进行删除等操作
    • 打开一个条目:该行应展开以显示更多输入字段
    • 自定义外观:圆角,阴影,背景渐变

    到目前为止,我的研究表明TableView具有大部分功能,但在外观上更难定制,CollectionView没有拖拽和放大器。 drop(对吗?)但很容易设计,WebView会花费很多精力来不伤害用户体验,我无法将我的模型直接绑定到输入字段。

    我遗漏了哪些利弊,你建议使用什么?

5 个答案:

答案 0 :(得分:4)

WebView没有意义。如果使用WebView,也可以创建Web应用程序。 NSCollectionView更像是网格数据,比如每小时的电视节目数据。

在这种情况下,NSTableView是唯一有意义的。我已经使用NSTableView实现了所有5个子弹点而没有问题。您需要扩展NSTableView并为自定义外观执行一些自定义绘制。这是最难的部分。

答案 1 :(得分:2)

  
      
  • 打开一个条目:该行应展开以显示更多输入字段
  •   

您需要outline view。表视图用于平面列表。

请注意,NSOutlineView是NSTableView的子类,因此所有表视图功能也适用于大纲视图。

答案 2 :(得分:2)

有些人已经这样做了。我成功使用的一个是Matteo Bertozzi,可以在这里找到:http://th30z.netsons.org/2009/03/cocoa-sidebar-with-badges-take-2/可能需要按摩才能让它正常工作(特别是如果你需要复杂的拖拽和-drop behavior),但是对于基本功能,例如获取列表中的节标题和项目,它可以很好地工作。

编辑:这有come up before,是cocoa-dev电子邮件列表中的常见问题。 Here are some other options

答案 3 :(得分:1)

使用“任何地方的F脚本”看看Things.app本身。

他们使用了名为“DetailTableView”的NSTableView子类,它呈现了精简的待办事项。折叠的待办事项是使用名为“ToDoCell”的自定义单元格实现的,但在编辑时获得的扩展外观很有趣。在这种情况下,他们有一个名为“ToDoEditView”的自定义视图,在需要时作为DetailTableView的子视图插入。我怀疑这个编辑视图暂时作为子视图添加到正确的位置,并且tableview的相应行会在它存在时临时调整大小。

所有这些都很具有推测性......我很想知道这是如何完成的细节。这是一个很棒的用户界面。

答案 4 :(得分:0)

我正在接近我的应用程序中的同一个问题(有一个类似于Things todo列表的大列表),我认为表格视图在这里会有很多意义。

诀窍是双击时细胞(“行”)会展开。这就是我到目前为止取得的所有进展。