0

多くの場合、アプリを作成しているとき、私はこのような状況に陥っています: ビュー スタックを処理する UINavigationController と、それぞれのビューを制御するいくつかの UIViewControllers があります...

しかし、mainView にいくつかのカスタム UIView を追加したい場合、コードを管理する方法がわかりません。

各 UIViewController は 1 つのビュー (通常は画面サイズ全体を占める) を 1 つだけ処理する必要があり、ビューはそのコンテンツを制御するべきではありません (極端な制限で更新する必要があります)。これもできません:

[myViewController1.view addSubview:childViewController.view];

このようなことを達成したい場合は、どうすればよいですか? 私のモックアップ

オレンジ色の部分は、同じ UIView(Controller?) の 3 つのインスタンスである必要がありますが、コンテンツは NSObject (明らかにユーザー) に依存します。

これはコンテンツをセグメント化する上で非常に重要だと思います。これは簡単な問題ですが、多くの矛盾する回答が見つかりました。この一般的な問題を処理するためのベスト プラクティスは何ですか? これらのオレンジ色のビューは、UITableViewDatasource を処理するために UIViewControllers のインスタンスである必要がありますか? この場合、addChildViewController は関連していますか?

私はすでに多くの機能を見つけましたが、どうすればよいかわかりません...また、xibsを使用しています。

私(および私が思う他の人々)を助けることができれば、事前に感謝します。

4

4 に答える 4

1

処理方法に応じて、どちらの方法 (ビューまたはビュー コントローラー) でも実行できます。確かに、1 つのオブジェクトを複数のテーブルのデータ ソースにすることができるので、その場合は複数のビューを追加するだけです。ただし、コードをさらに区分化しておきたい場合は、ビュー コントローラーを追加し、各コントロールに独自のビューを持たせます。これを行うには、addChildViewController を使用し、カスタム コンテナー コントローラーを作成するために Apple が説明しているメソッドを使用する必要があります。 . または、ストーリーボードでコンテナー ビューを使用して、カスタム コンテナー コントローラーの作成プロセスを簡素化することもできます。

于 2013-01-30T16:44:03.273 に答える
0

あなたは正しい道を進んでいます...サブビューの個別のインスタンスを作成し、それらをビューに追加します。3つ以上ある場合(たとえば、音楽のカバービューを想像してください。左右に無限にスクロールできます)、UICollectionViewControllerを見てみましょう...セルの再利用を管理するのに役立ちます。

ただし、3 つだけの場合は、異なるフレームで 3 つのインスタンスを作成し、それらをビューに追加するだけです。

于 2013-01-30T15:47:22.733 に答える
0

これが私がそれを行う方法です:

各オレンジ色のボックスはカスタム ビューになります (UIView から継承)

ビューには、ラベル、画像、およびテーブルビューが含まれます。

使用するこれらのビューのインスタンスの数がわからないため、ある種のタグ付けを使用することをお勧めします。これにより、これらのオレンジ色のビューにあるテーブルのデータソースとデリゲート メソッドを 1 か所に配置できます。

データソースとデリゲート メソッドでは、tableView.tag (orangeView.tag プロパティと同じ) を利用できます。

個人的には、(splitVC を除いて) 1 つのビューに複数の viewController があるのは嫌いです。おそらく、そのような要件がなかったからです。

オレンジ色のボックスの uiviewcontroller が uiview でどのように役立つかわかりません。

@James Boutcher が彼の回答で述べたように、UICollectionViews はこの問題をさらに簡素化します。

于 2013-01-30T16:55:26.390 に答える
0

UIView クラスを作成し、 drawRect メソッドをオーバーライドしてから、このクラスの subView を myViewController1.view に追加してみませんか

于 2013-01-30T16:56:51.820 に答える