0

高さと幅のプロパティを持つ Size クラスがあるとします (実際には、クラスはこれよりも少し複雑ですが、Size が良い例です)。

これを UI で $width x $height として表示したいと考えています。

これを行う明白な方法は、幅と高さに依存する寸法プロパティにバインドすることです。

私の質問は、この新しいプロパティを追加するのに最適な場所はどこですか?

モーダルで Size クラス自体に追加することもできますが、別のコントローラーが異なる文字列を表示したい場合は、さらに別のプロパティを作成することになります。また、私の場合、Size クラスはいくつかの異なる場所で使用されるフレームワークにあるため、これを行うのは少し気が進まない (ただし、すべてコードから制御できる可能性が高い)。

ビュー/コントローラーを含むプロジェクト内の Size クラスにカテゴリに追加して、使用されることがわかっている場所でのみ利用できるようにすることができますが、さまざまな場所で、カテゴリが過剰に使用される傾向があるという提案を見てきました、そしてこれがそれらのケースの1つであるかどうか疑問に思うことを余儀なくされています.

単一の Size インスタンスの場合、それを含むコントローラー クラスでプロパティを作成できますが、Size の配列がある場合、これはより困難になります。

サイズ オブジェクト全体にバインドし、トランスフォーマーを使用してそれらを文字列に変換することもできますが、サイズの配列にバインドすると、配列の各要素をトランスフォーマーで新しい配列に変換する必要が生じます。醜い。

4

3 に答える 3

4

この複合値を文字列として表示する場合は、テキスト フィールドの「表示パターン 1」をwidthプロパティにバインドし、「表示パターン 2」(表示パターン 1 をバインドしたときに表示される) をheightプロパティにバインドします。表示パターン 1 バインディングで、「表示パターン」を%{value1}@ x %{value2}@(はい、少し直観的でない構文) に設定します。これにより、「[幅] x [高さ]」を表示するテキスト フィールドが表示され、いずれかのプロパティの変更に合わせて更新されます。

で同じことができます。NSTextFieldCellたとえば、 のセルと同じNSTableColumnです。この方法の欠点は、テキスト フィールドで境界widthheight値を編集できないことです。それらを編集できるようにする必要がある場合は、NSValueTransformer を作成する必要があります。

于 2009-05-28T18:26:41.957 に答える
1

Barry が提案したように、表示パターンを介して複数のバインディングを使用することは、少なくとも UI について詳しく知らなくても、最良のアプローチのように思えます。私は過去に同じことを使用しました。そこでは、画像の配列のインスペクターを作成し、ディメンションを単一のテキスト フィールドにバインドしました。

一般に、可能であれば値トランスフォーマーまたはフォーマッターを使用することをお勧めしますが、最後の手段として、カテゴリを使用しても問題はありません。過去に日付へのバインドに問題があったときにこれを行いましたが、それを個々の時間と日付の部分に分解しました。カテゴリは、モデルとの分離を維持できるため、優れたアプローチですが、コントローラーに直接バインドするなどのクレイジーなことをする必要はありません。

于 2009-05-28T19:56:32.917 に答える
0

これを UI で $width x $height として表示したいと考えています。

なぜ 2 つのフィールドではないのでしょうか。次に、それらを編集可能にすることができます。

(実際には、クラスはこれよりも少し複雑ですが、サイズは良い例です)

上記が実際の状況では実行できないと仮定すると、NSFormatter のカスタム サブクラスを作成し、それをセルのフォーマッタとして設定することができます (単一のコントロールをバインドしないため、これはテーブル ビューにあると仮定します)。配列)。次に、Size オブジェクト全体にバインドします。

于 2009-05-28T17:46:47.217 に答える