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

发布于 2024-08-01 20:57:49 字数 614 浏览 10 评论 0 原文

我想构建一个 Cocoa 应用程序,其条目列表与 Things.app 的待办事项列表非常相似(请参阅截屏视频)。 问题是我应该使用

  1. TableView、
  2. CollectionView 还是
  3. WebView。

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

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

到目前为止,我的研究表明 TableView 具有大部分功能,但更难自定义从外观上看,CollectionView 没有拖拽功能。 drop(对吗?),但很容易设计,WebView 需要付出很大的努力才能不损害用户体验,而且我无法将我的模型直接绑定到输入字段。

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

I want to build a Cocoa App with a list of entries very similar to the ToDo list of Things.app (see the screencast). The question is whether I should use

  1. a TableView,
  2. a CollectionView or
  3. a WebView.

I think it could work with all of them, but which one suits the following requirements best?

  • have a list of entries -> 1 column & many rows
  • reordering with drag & drop
  • select single entries & use keys for actions like delete
  • open up an entry: the row should expand to show more input fields
  • customized look: rounded corners, shadow, background gradient

So far my research says that the TableView has most of the functionality, but is harder to customize in its appearance, the CollectionView doesn't have drag & drop (right?) but is easy to design and the WebView would take much effort to not hurt the user experience and I can't bind my model directly to input fields.

What pros and cons am I missing and what would you recommend to use?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

私藏温柔 2024-08-08 20:57:50
  • 打开一个条目:该行应展开以显示更多输入字段

您需要一个 大纲视图。 表格视图用于平面列表。

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

  • open up an entry: the row should expand to show more input fields

You need an outline view. A table view is for flat lists.

Note that NSOutlineView is a subclass of NSTableView, so all the table-view features work on an outline view as well.

物价感观 2024-08-08 20:57:50

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

编辑:这个问题之前就出现过,是 cocoa-dev 电子邮件列表中的一个常见问题。 以下是一些其他选项

There are people who've done this already. One that I've used successfully is by Matteo Bertozzi and is available here: http://th30z.netsons.org/2009/03/cocoa-sidebar-with-badges-take-2/ It might take a bit of massaging to get it to work properly (especially if you need complex drag-and-drop behavior), but for basic functionality, such as getting the section titles and items in the list, it works excellently.

Edit: This has come up before and is a common question on the cocoa-dev email list. Here are some other options.

忘东忘西忘不掉你 2024-08-08 20:57:50

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

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

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

Just took a look at Things.app itself using "F-script anywhere".

They've used a subclass of NSTableView called "DetailTableView" which presents the condensed todo items. Collapsed todo items are implemented using a custom cell called "ToDoCell", but the expanded look you get when editing is interesting. In that case they've got a custom view called "ToDoEditView" which is inserted as a subview of the DetailTableView when required. I suspect this editing view is temporarily added as a subview in the correct location and the corresponding row of the tableview gets resized temporarily while it is present.

All pretty speculative .. I'd love to know the details of how this was done. It's an awesome UI.

叫嚣ゝ 2024-08-08 20:57:50

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

诀窍是双击单元格(“行”)时展开。 这就是我迄今为止取得的所有进展。

I'm approaching the very same problem in my app (with one big list similar to the Things todo list) and I think a table view would make a lot of sense here.

The trick is having your cells ("rows") expand when double-clicked. That's about all the progress I've made so far.

败给现实 2024-08-08 20:57:49

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

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

A WebView doesn't make sense. You might as well create a web application if you use a WebView. An NSCollectionView is more for grid like data, like TV listings per hour.

NSTableView is the only one that makes sense in this case. I've implemented all 5 bullet points with with an NSTableView without issue. You need to extend NSTableView and do some custom drawing for the customized look. That's the hardest part.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文