【问题标题】:How do I implement a customized list in Cocoa?如何在 Cocoa 中实现自定义列表?
【发布时间】:2009-08-10 10:13:23
【问题描述】:

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

  1. 一个表格视图,
  2. CollectionView 或
  3. 一个 Web 视图。

我认为它可以适用于所有这些,但哪一个最适合以下要求?

  • 有一个条目列表 -> 1 列和多行
  • 通过拖放重新排序
  • 选择单个条目并使用键执行删除等操作
  • 打开一个条目:该行应展开以显示更多输入字段
  • 自定义外观:圆角、阴影、背景渐变

到目前为止,我的研究表明 TableView 具有大部分功能,但在外观上更难自定义,CollectionView 没有拖放功能(对吗?)但易于设计,WebView 需要花费很多时间努力不损害用户体验,我无法将我的模型直接绑定到输入字段。

我缺少哪些优点和缺点,您建议使用什么?

【问题讨论】:

    标签: cocoa webview nstableview nscollectionview


    【解决方案1】:

    WebView 没有意义。如果您使用 WebView,不妨创建一个 Web 应用程序。 NSCollectionView 更适合网格类数据,例如每小时的电视节目表。

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

    【讨论】:

      【解决方案2】:
      • 打开一个条目:该行应展开以显示更多输入字段

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

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

      【讨论】:

      • 嗯,在 NSOutlineView 中展开一行不只是显示更多“子行”吗?我宁愿改变行高并把更多的东西放进去。这有意义吗?
      • 是的。您实际上可能会使用表格视图,并实现他们在 Tiger 中添加支持的tableView:heightForRow: 委托方法:developer.apple.com/documentation/Cocoa/Reference/…:
      • 您还需要一个自定义单元格,您可以在不同的展开状态之间切换。
      【解决方案3】:

      已经有人这样做了。我成功使用的一个是 Matteo Bertozzi,可在此处获得:http://th30z.netsons.org/2009/03/cocoa-sidebar-with-badges-take-2/ 它可能需要 bit 按摩才能使其正常工作(特别是如果您需要复杂的拖放操作行为),但对于基本功能,例如获取列表中的部分标题和项目,它工作得很好。

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

      【讨论】:

      • 这些是很好的资源,但我认为侧边栏不是我们在这里讨论的内容。它是 Things 的“主要内容视图”部分,实际的待办事项就在其中。
      • @jbrennan touché。我开始观看链接的截屏视频,看到侧边栏,并认为这就是他想要的。您可以使用他在问题中提出的任何选项在技术上实现它。我想我应该在回答之前完整阅读这个问题,嗯? :)
      【解决方案4】:

      刚刚使用“F-script Anywhere”查看了 Things.app 本身。

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

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

      【讨论】:

      • 很好的侦探工作。我忘记了 F 脚本。也值得一试的是 class-dump。为什么不检查一下应用程序包的 Resources 文件夹,看看它的 nibs。这些都是过去帮助过我的所有事情。
      • 是的 .. 值得做以上关于事物的所有事情 .. 以获得灵感,因为它是一款设计精良的应用程序。另外..我认为最好使用Things使用的“插入视图”方法来实现“打开一行”的要求,因为如果您可以让它工作,这将为您提供很大的灵活性。显然,诀窍(正如 jbrennan 指出的那样)是让行扩展以为详细视图腾出空间。不过,我没有任何实际尝试过的经验。
      【解决方案5】:

      我在我的应用程序中遇到了同样的问题(有一个类似于待办事项列表的大列表),我认为表格视图在这里很有意义。

      诀窍是让您的单元格(“行”)在双击时展开。这就是我到目前为止所取得的所有进展。

      【讨论】:

      • 遗憾的是,我还没有完全搞定它!所以我可能是错的......目前,我在 Cocoa-touch 方面的经验比 Cocoa 丰富得多。
      猜你喜欢
      • 2011-03-25
      • 2014-10-21
      • 2018-12-31
      • 2020-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多