0

このサイトとインターネット全体を検索しようとしましたが、データを共有しながら複数のビュー コントローラーを切り替える方法が見つかりませんでした。次のコードを使用しようとしました (最初のメソッドが別のメソッドを呼び出してからビューを切り替えます):

-(IBAction) choosePhoto:(id)sender {
[self startMediaBrowserFromViewController: self
                            usingDelegate: self];
if(firstViewController.view.superview == nil)
{
    [secondViewController viewWillAppear:YES];
    [firstViewController viewWillDisappear:YES];

    [firstViewController.view removeFromSuperview];
    [self.view insertSubview:self.secondViewController.view atIndex:0];

    [firstViewController viewDidDisappear:YES];
    [secondViewController viewDidAppear:YES];
}

//3. now add animation
[UIView beginAnimations:@"View Flip" context:nil];
[UIView setAnimationDuration:1.25];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
//blue view will appear by flipping from right
if (secondViewController.view.superview == nil)
{
    [UIView setAnimationTransition: UIViewAnimationTransitionFlipFromRight 
                           forView:self.view cache:YES];

    [secondViewController viewWillAppear:YES];
    [firstViewController viewWillDisappear:YES];

    [firstViewController.view removeFromSuperview];
    [self.view insertSubview:self.secondViewController.view atIndex:0];

    [firstViewController viewDidDisappear:YES];
    [secondViewController viewDidAppear:YES];
}
[UIView commitAnimations];
    }

- (IBAction)switchViews:(id)sender {
if(self.secondViewController.view.superview == nil)
{
    [firstViewController.view removeFromSuperview];
    [self.view insertSubview:secondViewController.view atIndex:0];
}
    }

これは素晴らしいアニメーションを行いますが、View Controller を切り替えません。

助けてください?

編集:また、最初のView Controller内に別のビューを配置し、ビューを切り替える方法が役立ちます。

4

3 に答える 3

3

コードでは、ビューを切り替えていますが、実際にはビューコントローラーではありません。これは、ビューコントローラの内部メッセージング(たとえば、ビューのロード/アンロード、ビューの表示/非表示、自動回転)の観点からは、何も変更されず、元の「現在の」ビューコントローラが引き続き最上位にあることを意味します。現在iOSでは、これは通常、コンテナビューコントローラーを使用して管理されます。これは、一連のサブビューコントローラーを「管理」し、内部メッセージングと遷移を処理するビューコントローラーです。最も一般的なケースはUINavigationControllerとUITabBarControllerで、iPadではUISplitViewControllerとPageViewControllersも表示されます。

iOS5では、Appleは、いわゆる「View Controller Containment」を使用して、含まれているVCの変更をコンテナView Controller(通常のView Controller)に通知する方法を提供しました。WWDC 2011から取られ、iTunesで公開されたビデオ(登録済みの開発者のみ)があり、見ることができます。基本的に、この方法論は、含まれているVC構造の変更をコンテナビューコントローラに通知できるようにするいくつかのメソッドを追加します。ここでは詳しく説明しません。WWDCビデオを見て、このスタックオーバーフローの回答またはこの投稿を読んでください。後者はまさにあなたが探しているものだと思います。

于 2012-04-14T16:41:54.523 に答える
1

他のポスターが言うように、ビュー コントローラーのコンテンツ ビューを交換したり、混合したりしないでください。これを行うには、iOS 5 の新しい親子ビュー コントローラーのサポートを使用する必要があります。

iOS 5 で新しい親ビュー コントローラーのサポートを使用する場合、transitionFromViewController:toViewController:duration:options:animations:completion: という非常にクールで非常に強力なメソッドがあり、面倒な作業のほとんどを自動的に行います。使い方はとても簡単です。

(私は親/子ビュー コントローラーで WWDC ビデオを見ていませんが、開始するのに適した場所です。新しいメソッドを使い始めたばかりです。)

于 2012-04-14T23:40:34.707 に答える
0

UIViewControllerを切り替えるには、UINavigationControllerを使用する必要があります。

[[self navigationController] pushViewController:firstViewController animated:YES];

UIViewをUIViewController内に配置する

[[self view] addSubview:view1];

そして、ビューを切り替えるためにUIView.hiddenを使用します

view1.hidden = YES;
view2.hidden = NO;
于 2012-04-14T16:44:07.437 に答える