5

(以下のスクリーンショットは、私がやろうとしていることを説明するのに役立ちます)

この背後にある考え方はUIView、さまざまなUI要素が内部にある、たとえば、がありUIView、その中にがあるということUILabelです。

今、私はUIView(ラベルを中に入れて)複製したいのですが、その後どういうわけか、おそらくテキストプロパティを変更するなど、ラベルを変更する必要があります。

このようなものが必要な理由は、必要なものがUIViewすべて見栄えよくなるように構造化できるようにするためですが、実際には、異なるコピーを使用して異なるデータを使用するためです。

これが最善のアプローチかどうかはわかりませんが、私が思いついたのはこれだけです。誰かがこれを行う方法についてのアイデア、またはより良いアプローチについてのアイデアを持っているなら、私はそれを本当に感謝します。多くの!わかりやすくするためのスクリーンショット

4

3 に答える 3

7

個人的には、各ビューを個別に作成し、必要に応じて構成するのが最善の答えだと思います。新しいUIViewを同じように表示するように構成するだけのメソッドを作成し、各ビューを通過させることができます。

ただし、本当にUIViewをコピーする必要がある場合は、それをアーカイブしてから、アーカイブを解除できます。

id copyOfView = 
[NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:originalView]];
UIView *myView = (UIView *)copyOfView;
[self.view addSubview:myView];

これらがたくさんある場合は、Instrumentsタイムプロファイラーを使用して描画効率を確認してください。

于 2013-03-14T13:41:55.420 に答える
6

これは非常に自然で便利なことです。探しているのはコンテナビューコントローラです。再利用可能な「セル」を独自のViewControllerと独自のnibファイルに配置します。次に、親View Controllerで、を使用addChildViewController:してこれらを必要な数だけ追加し、それぞれを構成します。それぞれに、コンテンツを変更するために使用できる独自のIBOutletを含めることができます。

UITableViewこれは、 andで使用されるパターンと非常によく似てUITableViewCellいます(特に「子ビューコントローラー」は使用しませんが、このパターンを使用します)。

詳細については、iOS用ViewControllerプログラミングガイドの「カスタムコンテナViewControllerの作成」を参照してください。

Storyboardには、これをさらに簡単にするために、オブジェクトテンプレートのオプションとして「コンテナビュー」が含まれていることに注意してください。

低レベルのアクセスが必要な場合はUINib、nibファイルをロードしてそのアウトレットを配線するために手動でこれを行うこともできます(これはiOS 5以前の方法です)が、今日は子ビューコントローラーを使用します。

于 2013-03-14T13:54:21.467 に答える
0

ラベルが1つしかない場合、明らかな解決策は、そのラベルがサブビューとして追加されたカスタムUIViewサブクラスを作成することです。新しいビューが必要になるたびに、カスタムサブクラスのインスタンスを作成し、ラベルテキストを設定します。設定するものが複数ある場合、そのうちのいくつかはプロトタイプデザインパターンを使用できるすべてのカスタムサブクラスビューに共通であるため、実装は非常に簡単です。

于 2013-03-14T13:53:10.150 に答える