【问题标题】:Use tables as layout container in Cocoa?在 Cocoa 中使用表格作为布局容器?
【发布时间】:2011-06-22 18:09:34
【问题描述】:

首先;我目前是一名网络开发人员,所以有几件事情在我脑海中挥之不去,其中之一是:不要使用表格进行布局,只是不要!

我还在学习 Objective-C 并使用 Cocoa 框架,使用一本书。这是它的引述: “您可以结合使用这两种方法将表格转换为任意数据列表视图。现在每一行都可以是任意大小并使用任何单元格绘制。这使您可以在表格视图中绘制完全不相关的内容,并将其用作布局容器。”

感觉这样做是错误的SO...但是,这在使用 Cocoa 的 OSX 开发中很常见,还是我应该避免这种情况?

【问题讨论】:

  • 您的目标平台是什么:Mac OS X 还是 iOS?
  • 我猜是 iOS,因为 UITableView 被用于布局的所有地方(例如,Apple 自己的设置应用程序)。同样的道理也适用于 Mac OS X,尽管在大多数情况下使用 NSTableView 来布局视图可能是多余的。
  • @ben 是的,我以为 OP 想要 OS X,但在重新阅读问题后我不确定。如果是 OS X,NSTableView 有几个替代方案。
  • 目标平台是 OS X。@Bavarious 有什么替代品?

标签: objective-c cocoa


【解决方案1】:

“不要使用表格进行布局”背后的动机是强制分离呈现 (CSS) 和内容 (HTML)。这是一种标记语言。

在 Cocoa 中,范例是模型-视图-控制器。你想让你的模型(内容)独立于你的视图(展示......排序),但它并不完全一样。

如果您谈论的是 iOS,那么以这种方式使用 UITableView 是完全合乎情理的。那是因为它的工作是管理一个可以由任何东西组成的“单元格”表。没有假装它是用于您可能在书中找到的信息表。 UITableView 中的“表格”与 HTML 中的“表格”并不是同一个概念。例如,UITableView 甚至不能像 HTML 表格那样支持列。

如果您谈论的是 Mac OS X,NSTableView 在概念上更接近 HTML 表格。大多数情况下,它用于数据,例如,它可以用于制作复选框网格。 (但如果这就是你想要做的,NSMatrix 可能更合适。)

请注意,使用 HTML 表格进行布局的最严重违规行为涉及许多跨多列和多行的单元格和/或在表格中嵌入表格,这些技术甚至在 NSTableView 或 UITableView 中都没有类似物。您不能使用 NSTableView 来实现这些类型的布局。

所以:

  • 不要沉迷于用于布局的名称中带有“table”一词的事物。这不是坏事,Cocoa其实设计的很好,你只需要习惯这个领域。

  • 坚持将内容/模型与演示/视图分开的精神。一开始很难看到,因为一切都在 Objective-C 中(而不是两种独立的语言,如 HTML 和 CSS)。

【讨论】:

  • 这是一个很好的答案,但我认为它有点忽略了这一点,在可可中,所有视图都有框架,这些框架代表了它们在超级视图中的位置。大多数布局是通过将视图显式放置在框架中来完成的。与 HTML 表格更相似的情况是矩阵。
  • 很好,我添加了关于 NSMatrix 的注释。如果您认为有更好的方法来说明问题,请发布另一个答案。有足够的空间。
猜你喜欢
  • 1970-01-01
  • 2011-05-25
  • 2020-07-25
  • 1970-01-01
  • 2012-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多