代码之家  ›  专栏  ›  技术社区  ›  Redwood

为绑定到现有类添加复合属性的最佳方法是什么

  •  0
  • Redwood  · 技术社区  · 16 年前

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

    我想在我的用户界面中将其显示为$width x$height。

    这样做的明显方法是绑定到依赖于宽度和高度的尺寸属性。

    我的问题是,在哪里是最好的地方添加这个新的财产?

    我可以将它添加到模式中的大小类本身,但是如果另一个控制器想要显示不同的字符串,那么我将继续创建另一个属性。我也有点不愿意这样做,因为在我的例子中,size类在一个框架中,这个框架将在几个不同的地方使用(尽管很可能都来自我控制的代码)。

    我可以将它添加到包含视图/控制器的项目内的大小类中,这样它只能在我知道将要使用它的地方可用,但在不同的地方,我已经看到了类别往往被过度使用的建议,并被迫怀疑这是否是其中一种情况。

    对于单个大小的实例,我可以在包含它的控制器类中创建该属性,但是当您有一个大小数组时,这就变得更加困难了。

    我可以绑定到整个大小的对象,并使用转换器将其转换为字符串,但是绑定到大小数组将导致您必须将数组的每个元素转换为转换器中的新数组,这看起来有点难看。

    3 回复  |  直到 16 年前
        1
  •  4
  •   Barry Wark    16 年前

    如果希望将此复合值显示为字符串,则将文本字段的“显示模式1”绑定到 width 属性和“显示模式2”(在将显示模式1绑定到 height 财产。在显示模式1绑定中,将“显示模式”设置为 %{value1}@ x %{value2}@ (是的,有点非逻辑语法)。这将提供一个显示“[宽度]x[高度]”的文本字段,并将在任何属性更改时更新。

    你也可以用 NSTextFieldCell ,例如,作为 NSTableColumn . 此方法的缺点是文本字段将无法编辑绑定 宽度 高度 价值观。如果需要编辑NSValueTransformer,则必须编写它。

        2
  •  1
  •   Marc Charbonneau    16 年前

    按照巴里的建议,通过显示模式使用多个绑定听起来是最好的方法,至少在不了解更多UI的情况下是这样。我以前也用过同样的方法,我为一组图像构建了一个检查器,并将维度绑定到一个文本字段。

    一般来说,如果可以的话,最好使用价值转换器或格式化程序,但在最后一种情况下,使用类别没有任何问题。我以前做过这样的事情,当时我很难绑定到一个日期,但是把它分解成单独的时间和日期片段。类别是一种很好的方法,因为它允许您与模型保持分离,但是您不需要做任何疯狂的事情,比如直接绑定到控制器。

        3
  •  0
  •   Peter Hosey    16 年前

    我想在我的用户界面中将其显示为$width x$height。

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

    (实际上,这门课比这门课要复杂一点,但规模就是一个很好的例子)

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