1

我开始开发我的第一个成熟的 Cocoa 应用程序,其中包含一个我希望其行为(和外观)类似于 Automator 的AMWorkflowView.

我想实现的基本功能:

  • 子视图的定位
  • 以展开/折叠状态显示子视图
  • 多项选择
  • 拖放

为了习惯 Cocoa,我从一个自定义开始,NSView它主要用作自定义子视图的容器,并处理它们的定位和多选。子视图也是 的子类NSView,它们本身包含可变数量的视图,如按钮、标签和弹出菜单,因此可以有不同的高度。这工作得很好,但在继续之前,我想确保根据 MVC 模式让所有东西都整齐有序。

我怀疑 Cocoa 中已经有一个类可以促进视图容器的实现,比如可能NSCollectionView. 不过,似乎没有(简单的)方法可以在 中显示不同大小的视图NSCollectionView。我应该继续实现我的自定义NSView(可能使用NSArrayController选择和排序支持),还是有更好的方法?

任何帮助深表感谢

4

1 回答 1

0

不幸的是,答案是你必须自己动手。NSCollectionView不允许可变大小的项目(这也排除了展开/折叠状态)。

对于有限数量的项目,您可以很容易地完成此操作(您只需要一个容器视图,在要求布局时正确排列子视图,然后您需要确保在事情发生变化时重新布局)。但是,对于许多子视图,您需要注意尽可能高效。这可以从尽可能少的布局开始(例如,只有那些“在”调整大小的视图之后)并变得像缓存原型视图的视觉表示一样复杂,为视图之外的所有对象绘制缓存的图像(快!)正在编辑,并且仅使用/定位正在编辑的视图的“真实”视图。

拖放的工作方式与往常一样,但以上都没有考虑到漂亮的动画NSCollectionView给你。:-) 正是因为所有子视图都是统一的(因此布局计算快速而简单),所以它快速而精美的动画。一旦添加了不规则尺寸,问题就会变得更加复杂。

底线:如果您需要可变大小的视图,NSCollectionView将无法工作,您需要自己滚动或查找其他人的共享代码,但性能和漂亮的动画并不容易。

于 2010-04-06T14:50:40.580 回答