2009-03-01 13 views
2

自分自身が、そのビューからビューコントローラへのアクセスを必要としていることがわかりました。ここでココアプログラミングに関する概念的または技術的な問題

方法

-(void)changePageView:(UIViewController*)newviewcont withtransitiontype:(int)t andtransitionspeed:(int)s 
{ 
    //Remove whatever view is currently loaded at index 0, this index is only to be used by "page" views 
    UIView *oldview = [self.view.subviews objectAtIndex:0]; 

    [UIView beginAnimations:@"View Flip" context:nil]; 
    [UIView setAnimationDuration:s]; 
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.view cache:YES]; 
    [newviewcont viewWillAppear:YES]; 
    //[oldview viewWillDisappear:YES]; 
    [oldview removeFromSuperview]; 
    [self.view insertSubview:newviewcont.view atIndex:0]; 
    //[oldview viewDidDisappear:YES]; 
    [newviewcont viewDidAppear:YES]; 

} 

である基本的に、私はrootcontrollersビューからsubviewcontorllersビューをスワップアウトするために、ルートコントローラによって呼び出される汎用ビューの切り替え方法を記述しようとしています。

私はsubviewcontrollerを渡し、現在のサブビューを削除することができます。しかし、適切なビュー切り替えアニメーションを行うには、現在のビュービューコントローラにアクセスする必要があります。これは間違ったアプローチですか、それはできますか?

答えて

-2

あなたのアプローチが間違っていると思います。私は信じてUINavigationControllerを調べる必要があります。

+0

を行った場合、それを指しナビゲーションバーが必要です(それを使ってビューのスウィッチを実装することができます) – hhafez

+0

あなたは正しいです。私は間違ったアプローチをしていた。基本的に私はMVCのパラダイムと戦っていました。私はまだいくつかのケースでMVCを適用する方法を理解しようとしていますが、少なくとも進歩しています! – michael

0

changeView()メソッドはviewcontrollerに属します。それはあなたがそれがコントローラではないことを知っているという視点を持つ問題を解決し、それはもっと理にかなっています。また

あなたはUIViewControllerオブジェクトのメソッドを使用して行うことができないchangeView()で空想何かをやっている場合を除き、あなたが拡張できる独自のビューの切り替え方法を実装するためのUIViewController neccesaryであるならば、あなただけの、代わりにそれを使用する必要がありますあなたのビューでcontrollrビューの一部を実装する代わりに。

私の2セント:)

+0

changepageviewメソッドはrootviewコントローラにあります。問題は、私がviewcontrollerへのハンドルを必要としていることです。viewcontrollerには現在、rootviewcontrollersビューのインデックス0に対応するビューがあります。インデックス0のビューにアクセスできますが、View Controllerはアクセスできません。 – michael

+0

OPから '私は、rootcontrollerビューからsubviewcontorllersビューをスワップするためにルートコントローラによって呼び出される汎用ビュースイッチメソッドを記述しようとしています。私がこの機能の背後にあるあなたの意図を誤解していない限り、UIViewcontrollerは既にこの機能を提供しています。 – hhafez

1

私は現在のサブ・ビュー・コントローラ(currentController)上に保持rootcontrollerにメンバーを追加し、コントローラスワップが彼はないかもしれ

-(void)changePageView:(UIViewController*)newviewcont withtransitiontype:(int)t andtransitionspeed:(int)s 
{ 


    [UIView beginAnimations:@"View Flip" context:nil]; 
    [UIView setAnimationDuration:s]; 
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.view cache:YES]; 
    [newviewcont viewWillAppear:YES]; 
    [self.currentController viewWillDisappear:YES]; 
    [self.currentController.view removeFromSuperview]; 
    [self.view insertSubview:newviewcont.view atIndex:0]; 
    [self.currentController viewDidDisappear:YES]; 
    [newviewcont viewDidAppear:YES]; 
    [UIView commitAnimations]; 


    self.currentController = newviewcont; 

} 
関連する問題