【问题标题】:General design for a Mac app, document based versus?Mac 应用程序的一般设计,基于文档与?
【发布时间】:2012-07-10 21:10:36
【问题描述】:

我正在学习可可,我正在创建一个应用程序,它需要与下面的屏幕截图类似的布局(这似乎是一种非常常见的布局方法)。

这种类型的 Cocoa 应用程序会是什么类型的控件/架构?

我仍处于学习/阅读的早期阶段,我只知道基于文档的应用程序,但这种布局看起来不像基于文档的应用程序,因为它并不真正需要打开了多个窗口。

如果不是文档,是否有其他设计模式或布局的名称?

目前为止,我会这样描述:

如果有人能给我详细介绍此类应用的高级设计,我将不胜感激,例如:面板数量、使用的视图、控件、控制器等?

另外,还有几个小问题:

  1. 左窗格中的那些是什么菜单控件,然后展开并显示子元素?

  2. 当首选项窗口显示时,这种效果叫什么让它以动画方式显示(就像地址簿一样),它是一个小窗口,以动画方式扩展到正确的大小。

【问题讨论】:

    标签: objective-c xcode cocoa


    【解决方案1】:

    您说得对,这可能不是基于文档的应用程序,因为它们默认在新窗口中打开文档。

    要像这样布局窗口,需要一个包含 3 个窗格的 NSSplitView。每个窗格都可以选择包含从 NSViewController 加载的视图,这有助于保持代码模块化,但这取决于您尝试执行的操作是否合适。

    左侧窗格将是 NSOutlineViewNSTableView 子类),中间是 NSTableView,但我不确定右侧视图将如何创建(大量自定义 @987654327 @s 和其他东西,可能是WebView)

    该弹出选项窗口可能是一个NSPopover(其中包含一个NSViewController),但它仅与 OS X 10.7 兼容,因此也可以完全自定义以实现向后兼容性和更轻松的自定义。

    另请注意,这是您给出的一个相当复杂的示例,其中有许多自定义控件可能比看起来更难创建:

    • 为了让左侧的大纲视图具有未读计数和图标(从内存中),AppKit 没有内置,所以都是自定义创建的。要做到这一点,您需要对 NSCellNSView 有深入的了解,并且最好还了解 Core Animation 层支持的视图,以及在不同方面使用什么。

    • 窗口的标题栏比平常高。这意味着如果不是从头开始创建整个窗口,开发人员可能不得不做一些疯狂的事情来让它工作。

    这只是开始。里面有很多非常好的设计,都是定制的,从头开始。

    有时设计 Mac 应用程序可能很困难。 AppKit 已经很老了(从 NEXT 时代回来),并且有很多遗留问题。另一方面,iOS 上的 UIKit 相当不错——Apple 显然从他们的过去中吸取了教训,并让事情变得更好。


    我几乎没有谈到所有这些背后的控制器和模型。有很多不同的方法可以做到这一点。对于持久性,您可以使用 CoreData、sqlite、NSKeyedArchived 等等。 Brent Simmons(另一位 RSS 阅读器 NetNewsWire 的前开发人员)为此写了一些有趣的博客文章: http://inessential.com/2010/02/26/on_switching_away_from_core_data http://inessential.com/2011/09/22/core_data_revisited

    您设计模型和控制器的方式实际上取决于具体问题。不过 Cocoa 确实迫使你坚持使用 MVC——如果你不这样做,事情肯定会变得一团糟。


    希望对大家有所帮助!我真的只是在学习自己。

    【讨论】:

    • “窗口的标题栏比平常高”是什么意思?
    • 标题栏(左边是交通灯按钮,右边是其他的)已以非标准方式修改。它更高(就像 Mac App Store 一样,也是非标准的),并且按钮位于不同的位置(交通灯垂直居中,而不是在最左上角)
    【解决方案2】:

    Apple 将这种类型的应用程序设计称为单窗口、库(或“shoebox”)风格,并在文档中为这种设计选择提供了许多建议。

    (见Mac App Programming Guide

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-07
      • 2018-07-25
      • 2011-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多