0

假设我有一个具有高度和宽度属性的 Size 类(实际上该类比这更复杂,但 Size 是一个很好的例子)。

我想在我的 UI 中将其显示为 $width x $height。

显而易见的方法是绑定到一个依赖于宽度和高度的尺寸属性。

我的问题是添加这个新属性的最佳位置在哪里?

我可以将它添加到模态中的 Size 类本身,但是如果另一个控制器想要显示不同的字符串,我会卡住创建另一个属性。我也有点不愿意这样做,因为在我的情况下, Size 类位于一个框架中,该框架将在几个不同的地方使用(尽管可能全部来自我可以控制的代码)。

我可以将它添加到包含视图/控制器的项目内的 Size 类的类别中,因此它仅在我知道将使用它的地方可用,但在不同的地方我已经看到有关类别倾向于被过度使用的建议,并且不得不怀疑这是否是其中一种情况。

在单个 Size 实例的情况下,我可以在包含它的控制器类中创建属性,但是当您有一个 Sizes 数组时,这变得更加困难。

我可以绑定到整个大小对象并使用转换器将它们转换为字符串,但是绑定到大小数组会导致您必须将数组的每个元素转换为转换器中的新数组,这似乎有点丑陋。

4

3 回答 3

4

如果要将此复合值显示为字符串,则将文本字段的“显示模式 1”绑定到width属性,并将“显示模式 2”(在绑定显示模式 1 时显示)绑定到height属性。在 Display Pattern 1 绑定中,将“Display Pattern”设置为%{value1}@ x %{value2}@(是的,语法有点不直观)。这将提供一个显示“[width] x [height]”的文本字段,并将更新任一属性的更改。

您可以对 an 执行相同的操作NSTextFieldCell,例如作为 an 中的单元格NSTableColumn。此方法的缺点是文本字段将无法编辑绑定widthheight值。如果您需要能够编辑它们,则必须编写 NSValueTransformer。

于 2009-05-28T18:26:41.957 回答
1

正如 Barry 建议的那样,通过显示模式使用多个绑定听起来是最好的方法,至少在不了解您的 UI 的情况下是这样。我过去使用过同样的东西,我为一组图像构建了一个检查器,并将尺寸绑定到单个文本字段。

一般来说,如果可以的话,最好使用值转换器或格式化程序,但在万不得已的情况下,使用类别并没有错。过去,当我无法绑定到日期时,我已经这样做了,但是将其分解为单独的时间和日期部分。类别是一种很好的方法,因为它可以让你保持与模型的分离,但你不需要做任何疯狂的事情,比如直接绑定到控制器。

于 2009-05-28T19:56:32.917 回答
0

我想在我的 UI 中将其显示为 $width x $height。

为什么不是两个字段?然后你可以让它们可编辑。

(实际上这个类比这个复杂一点,但是 Size 是一个很好的例子)

假设上述方法在您的实际情况下不可行,您可以尝试创建 NSFormatter 的自定义子类,并将其设置为单元格上的格式化程序(我假设这是在表格视图中,因为您不会将单个控件绑定到数组)。然后,您将绑定到整个 Size 对象。

于 2009-05-28T17:46:47.217 回答