0

この質問は「スタイル」に関するものです。これは非常に一般的な問題であり、エレガントな解決策を探しているからです。私はいくつかの「高度な」UIViewを作成し、それらを非常にカスタマイズ可能にしようとしています. 通常、カスタム init メソッド内に UIView 構造を作成しますが、init メソッド内のすべてのカスタマイズ可能なパラメーターの値を知る必要があるため、次のような非常に長い init メソッドが必要になる場合があります。

initWithFrame:color:font:verticalspace:verylonglist:

デリゲート デザイン パターンを使用しようとしましたが、デリゲートを init メソッド内に渡す必要もあります。

私の実際の最善の解決策は、init メソッドを空のままにして、レイアウトに関するすべてを「configure」メソッド内に移動することです。背景色やフォントなどのプロパティが発生するたびに、このメソッドを呼び出してビューを再構築します。

この問題を解決する最善の方法があると思います... UITableView クラスのコードを見てみたいと思います。そのクラスでは、init メソッドの外部にデリゲートを渡すことができるからです。

4

2 に答える 2

2

UIButtonまたはのようなものをチェックしてくださいUILabel。どちらも構成可能な側面がたくさんありますが、これらのオブジェクトの 1 つのインスタンスを作成するだけであれば、必要な情報はほとんどありません。

一般に、クラスのコンシューマーがクラスが機能するための最小限の情報を指定できるようにする init メソッドを提供します。

一連の値を使用してクラスを初期化する方法をコンシューマーに提供したい場合は、パラメーターの を受け取る何らかのinitWithDictionary:メソッドの使用を検討してNSDictionaryください。これにより、メソッド名が短くなり、ユーザーはクラスの任意の数の設定をカスタマイズできます。

また、消費者が標準的な値のセットを持つインスタンスを要求する方法を提供することも検討できます。UITableViewCellたとえば、initWithStyle:reuseIdentifier:メソッドがあります。重要な部分はスタイルです。や などUITableViewCellのデフォルト スタイルがいくつか用意されています。UITableViewCellStyleDefaultUITableViewCellStyleSubtitle

于 2012-07-04T16:28:17.510 に答える
0

それが標準/ベストプラクティスの方法かどうかはわかりませんが、このような場合は辞書を使用し、それをinitWithDictionary初期化子に渡します。クラスが使用されるたびにすべてのパラメーターを指定する必要がないように、カスタマイズ (およびデリゲート セット) できる「デフォルト設定」タイプの辞書を返すクラス メソッドを作成することも可能です。

于 2012-07-04T16:30:20.423 に答える