2012-04-14 18 views
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を切り替えていません。

助けてください?

EDIT: また、最初のビューコントローラ内に別のビューを配置し、ビューを切り替える方法が役立ちます。

答えて

1

を切り替えるためのUIView.hiddenを使用する内側のUIViewを置く

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

は、あなたがスワップすべきではありませんか、実行中にView Controllerのコンテンツビューをミックスします。これを行うには、iOS 5で新しい親子ビューコントローラサポートを使用する必要があります。

iOS 5で新しい親ビューコントローラサポートを使用する場合は、非常にクールで非常に強力なメソッドtransitionFromViewController :toViewController:duration:options:animation:completion:あなたのために大部分を行います。使用するのはかなり簡単です。

(私はちょうど新しいメソッドを使用し始めました。私は、親/子ビューコントローラのWWDCのビデオを見ていないが、それは開始するには良い場所でしょう。)

3

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

iOS5を使用するAppleは、いわゆるView Controller Containmentを使用して、含まれているVCの変更をコンテナビューコントローラ(通常のView Controller)に通知する方法を提供しました。 WWDC 2011から撮影され、iTunesで公開されているビデオがあります(登録された開発者のみ)。 基本的に、この方法論では、コンテナビューコントローラに含まれるVC構造の変更を通知できるいくつかのメソッドが追加されています。私はここで詳細に記入することはしませんし、WWDCのビデオを見て、this stack overflow answerまたはthis postを読んでください。私は後者がまさにあなたが探しているものだと思います。

+0

ビデオの名前は何ですか? –

+0

ビデオは、2011年6月15日のセッション102、「Implementing UIViewController Containment」という名前です。iTunes Storeからアクセスできます。 – smileBot

0

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

[[self view] addSubview:view1]; 

そして、私は他のポスターが言うようにビュー

view1.hidden = YES; 
view2.hidden = NO; 
+0

Interface Builderで表示できますか? –

関連する問題