7

複数のビューを含むビューが必要です。下の画像を参照してください。 ここに画像の説明を入力

ご覧のとおり、pageController はページ ナビゲーションを制御し、viewController (ページ) の前後に提供します。

pageContentController は、テキストを表示して処理します。

soundPlayer は関連するサウンドの再生を管理します

それらすべてを 1 つのコントローラーに入れることができますが、私のコントローラーは多くのタスクを実行する必要があり、それを管理するのは難しいタスクです。ライトビューコントローラーに従わないためです。そしてその結束力を低下させます。どうすればこれを達成できるか知りたかったので、詳しく説明してください。

4

5 に答える 5

5

詳細な回答をありがとうございます。あなたの答えは私を明確にしました。私がしたこと:

SoundPalyerVCの子として追加しましたPageContentVC

SoundPlayerVC *soundPlayer = [[StoryViewController alloc] initWithStory:self.storyManagedObject];
[self addChildViewController:soundPlayer];
[self.view addSubview:soundPlayer.view];
[soundPlayer didMoveToParentViewController:self];
soundPlayer.view.frame = CGRectMake(0, self.view.frame.size.height-soundPlayer.view.frame.size.height, 320, soundPlayer.view.frame.size.height);

それはとても簡単でした。今私のコードは分離されています。

于 2014-01-06T19:30:05.393 に答える
1

pageController ビューに、pageContentController のビューと soundPlayer のビューをサブビューとして追加します。

以下のコードを pageController.m ファイルに記述します

soundPlayer = [[SoundPlayer alloc] init];
[self.view addSubview:soundPlayer.view];
souldPlayer.frame = //set it value as desired.

pageContentController も同様です。

于 2013-12-21T20:38:15.333 に答える
1

私がすることは次のとおりです。

1) ビューごとにカスタム クラスを作成します。
2) 次に、View Classes を作成したクラスに設定します。

ビューのクラスをカスタム作成されたクラスに設定する

3) 次に、これらのビュー クラス内で必要な機能を処理するコードを記述します。

@interface PageContent : UIView

- (void) showTest : (NSString *) textToShow;

@end

@implementation PageContent 

- (void) showTest : (NSString *) textToShow
{
    //Then here you would do whatever you need to do with this text, and display it
}
@end

@interface SoundPlayer : UIView

- (void) playSound;

@end


@implementation SoundPlayer

-(void) playSound
{
    //Do whatever you need to do with the sound here.
}

@end

4) 次に、View Controller クラスでこれらの各ビューへのアウトレットを作成します。

//So your View Controller Class would look something like this.

@interface YourViewController : UIViewController

@property (strong, nonatomic) IBOutlet Page *page;
@property (strong, nonatomic) IBOutlet PageContent *pageContent;
@property (strong, nonatomic) IBOutlet SoundPlayer *soundPlayer;

@end

5) 次に、View Controller @implementation で次のようなことができます

@implementation YourViewController

-(void) showContent
{
    [self.pageContent showText:@"Text To Show"];
}
-(void) playSound
{
    [self.soundPlayer playSound];
}

@end

View Controllerでこれらの([self showContent]または[self playSound])メソッドを呼び出すと、特定のビューのメソッドが呼び出されるため、再利用できない非常に長いView Controllerがなくなります。

ビューの例を示しただけです。ここで私が何をしているかを見て、必要なものすべてにこれを実装していただければ幸いです。

于 2013-12-21T20:33:03.287 に答える
1

iOS 5 以降、Apple は親/子ビュー コントローラーのサポートを OS に追加しました。UIViewController クラスには、親/子ビュー コントローラーの関係の設定をサポートするための新しい呼び出しがあります。この場合、1 つのビュー コントローラー (親) が他のビュー コントローラーを設定するか、または複数のビュー コントローラーを設定して、それらのコンテンツ ビューが親のビュー階層に挿入されるようにします。これは大きな改善でしたが、正しくセットアップしてすべてを正しく機能させるにはかなりの作業が必要でした。

iOS 6 以降、Apple はコンテナー ビュー (特殊なタイプの UIView にすぎません) と埋め込みセグエを追加しました。IB で親になるビュー コントローラーのシーンを開き、インターフェイス オブジェクトのリストを選択して、「container」と入力します。コンテナ ビューが表示されます。コンテナー ビューを親ビュー コントローラーにドラッグし、必要な場所に配置します。

次に、コンテナー ビューから、そのコンテナーに配置する子ビュー コントローラーのインターフェイスを定義するシーンに、コントロールを押しながらドラッグします。デフォルトでは、埋め込みセグエを作成する必要があります。デフォルトを受け入れます。それだけです。ここで、親ビュー コントローラーをロードすると、システムは、セットアップした子ビュー コントローラーもインスタンス化し、正しく動作させるすべての「配管」を接続します。

親と子が通信する必要がある場合は、埋め込みセグエに識別子を設定してから、他のセグエと同様に、子を構成する prepareForSegue コードを記述できます。

コンテナー ビューと埋め込みセグエは素晴らしく、この種の設定を非常に簡単にします。

埋め込みセグエを効果的に使用する github のサンプル プロジェクトがあります。リンクは次のとおりです。

埋め込みセグエを使用して、親 VC で 2 つの静的テーブル ビューを管理するデモ プロジェクト。

于 2013-12-21T21:21:55.573 に答える
0

インターフェイスビルダーを介してコンテナービューオブジェクトを使用すると、それが実現します。説明から: 「コンテナー ビューは、子ビュー コントローラーを含めることができるビュー コントローラーのビュー サブグラフ内の領域を定義します。コンテナー ビューからストーリーボードの子ビュー コントローラーへの埋め込みセグエを作成します。」

このようにして、親ビューコントローラーで子ビューコントローラーとして必要な2つの領域を正確に定義し、ページコンテンツにUIPageViewControllerをロードし、サウンドプレーヤーにプレーヤーコントローラーをロードできます。

于 2013-12-21T21:14:49.167 に答える