1

私は、UIModalTransitionStylePartialCurl遷移を介して表示されるモーダルビューを持っています。presentModalViewController from UIModalTransitionStylePartialCurl viewController

  1. は、その後、(ダウンカール)
  2. 存在新しいモーダルビュー(カバー垂直)を、現在のモーダルビューを閉じる:そのモーダルビューで、私がしたいボタン、があります。

しかし、私は次のことをしようとすると、それは単にカールモーダルビューを閉じるが、新しいものを提示していません:

[self dismissModalViewControllerAnimated:YES]; 
NewView *vc = [[NewView alloc] init]; 
[self.parentViewController presentModalViewController:vc animated:YES]; 

私はそれが最後の行に関係している感覚を持っています。 selfにNewViewを表示しても動作しません。どうすればこれを達成できますか?

+0

どのクラスが自己ですか? –

+0

selfは、ページカールの下に表示されるモーダルビューです。 – Keller

答えて

3

iOS 5をお使いですか?

ので、あなたが見ている問題は、ここに文書の変更にある場合は、次のビューが持っていなかった場合は、

前のiOS 5.0へ:リンクしているページでhttp://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIViewController_Class/Reference/Reference.html#//apple_ref/occ/instp/UIViewController/parentViewController

重要なビットはこれです親ビューコントローラであり、モーダルで表示されていた場合は、それを表示していたビューコントローラが返されます。これはもはやケースではない。 presentingViewControllerプロパティを使用して、プレゼンテーションビューコントローラを取得できます。

したがって、self.presentingViewControllerに変更すると問題は解決する可能性がありますが、おそらくそうではありません。あなたの最初のモーダルから、このコードを使用して

[self dismissModalViewControllerAnimated:YES]; 
SecondViewController *sec = [[SecondViewController alloc] initWithNibName:nil bundle:nil]; 
sec.modalTransitionStyle = UIModalTransitionStyleCoverVertical; 
[self.presentingViewController presentModalViewController:sec animated:YES]; 

あなたが提示新しいビューコントローラが表示されません。

あなたは(iOS5をのような)新しいメソッドを使用したいの後にあなたが何であるかを取得するには:このメソッドは、presentModalViewControllerための推奨交換です

- (void)presentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion 

を。

そして、あなたの最初のビューコントローラ上のカスタムメソッド、のようなもの:メソッドは、あなたの現在のモーダルを閉じ、新しいものを提示することができ、両方の

- (void)cycleModalViewControllersWithController:(UIViewController *)newViewController 

、このような何か:使用

- (void)cycleModalViewControllersWithController:(UIViewController *)newViewController { 
    [self dismissViewControllerAnimated:YES completion:^{ 
     [self presentViewController:newViewController animated:YES completion:NULL]; 
    }]; 
} 

新しいモーダルを開始するための補完ブロックは、古いモーダルがアニメーション化されるまで待ってください。したがって、2つ目のモーダルビューコントローラでは、最初のモーダルビューコントローラでカスタムメソッドを呼び出し、新しいものを解除して表示するようにします。

+0

iOS 5のアップデートをありがとう、私はself.parentViewControllerがnilを返すのを見て驚き、ドキュメントで指摘した行を見逃しています。再度ありがとう+1。 –

+0

信じられないほど、ありがとう! – Keller

0

最初に検証するのは、self.parentViewControllerがnilであるかどうかです。それは(私のテストでは、それがnilだった)nilかどう

NSLog(@"parent == %@", self.parentViewController); 

あなたはそのモーダルビューで親へのポインタを渡す必要があります。 その後、あなたがここにself.callerこの

[self.caller performSelector:@selector(launchNewView:) 
        withObject:nil 
        afterDelay:1.0]; 
[self.caller dismissModalViewControllerAnimated:YES]; 

ような何かを行うことができますが、それがモーダルモードで表示された直前のUIViewControllerで設定された「親」です。
これは完璧な解決策ではありませんが、私のテストではうまくいきます。

関連する問題