0

我目前正在为我的应用程序开发一个类似向导的功能,其中每个步骤模型类都是基础 WizardStep 类的子类。我现在只有三个(但他们总是少于十二个)。

我有一个 WizardController 来支持实际的向导 NSView,我现在面临如何在 UI 中管理这个多态 WizardStep 类的问题。请注意,我将为每个步骤子类广泛使用 Cocoa 绑定。

想到了三个解决方案:

1) 为每种 WizardStep 类型创建单独的 NSView(s) 然后创建相等数量的 NSObjectController 并在它们之间绑定特定的子类属性。当用户进入一个步骤时,我将填充 NSObjectController 的内容并在向导视图中显示视图(当然,作为子视图)。

2) 为每种 WizardStep 类型创建单独的 NSView(s) 然后创建单个 NSObjectController 并将所有子类属性绑定到它(其中一些将不可用,具体取决于控制器内容的类型)。当用户进入一个步骤时,我将填充 NSObjectController 的内容并在向导视图中显示视图(当然,作为子视图)。

3)为每种 WizardStep 类型创建一个带有选项卡的 NSTabView 然后创建一个 NSObjectController(或使用向导 ViewController)并将所有子类属性绑定到它(其中一些将不可用,如解决方案 2 中所示)。当用户进入一个步骤时,我将填充 NSObjectController 的内容并根据特定的步骤类型设置选项卡视图的 selectedIndex 属性。

我觉得解决方案 1) 是最正确和最优雅的,但我担心它可能是矫枉过正(许多 NSObjectController,许多 NSView)。解决方案 2) 和 3) 对我来说很愚蠢(因为绑定不可用)。

关于如何进行的任何建议?

谢谢大家,彼得

4

1 回答 1

1

我这样做的方法是创建一个对工作流中的所有步骤都有效(或至少不会引发)的单个模型类,其中一个属性指示当前步骤。然后,您可以将 NSTabView 绑定到currentStep属性,并将每个选项卡上的所有其他控件绑定到它们显示的属性。即使您在放弃每一步模型子类方法的道路上走得太远,您也可以创建另一个模型对象,将多个步骤聚合到一个对象中。

这种方法意味着您有一个模型类,而不是 X 模型类、Y 视图类和 Z NSObjectController 子类。FWIW,我很难想象为什么在这种情况下会继承 NSObjectController,尽管从更广泛的意义上说,继承 NSView 有很多理由,但我不清楚在这种特殊情况下需要什么。

至于不可用的绑定,您可以为有时可能不可用的绑定关闭“Raises For Not Applicable Keys”选项,但如果您喜欢在异常抛出时设置断点,这可能会很痛苦,因为关闭该选项不会t 阻止异常被抛出,它只是让控件吞下异常。

于 2012-12-03T13:49:13.277 回答