2

私はユーザーがログインして登録できるようにするHomeControllerを持っています。ユーザーがログインをクリックすると、セグを使用してモーダルビューが開きます。モーダルビューを終了し、セグを実行して2番目のモーダルビューを開きます

モーダルビューの中には、registerというボタンがあります。目的のアクションはログインモーダルビューを閉じた後、performSegueWithIdentifier:

- (void)loginControllerDidRegister:(LoginController *)controller sender:(id)sender 
{ 
    NSLog(@"loginControllerDidRegister"); 
    [self dismissViewControllerAnimated:YES completion:nil]; 
    [self performSegueWithIdentifier:@"RegistrationSegue" sender:sender]; 
} 

を使用して登録モーダルビューを開くには、これは正しく、それは私はそれだけで呼び出されていることを示すコードをログに記録しているperformSegueWithIdentifier:を呼び出し、モーダルビューを閉じるれます私が登録ボタンを押したかのように。

ログインモーダルビューのアニメーションが消えていると、2番目のモーダルビューの表示が妨げられている可能性があります。これを解決するために何ができるかについてのアイデアはありますか?

+0

ないあなたの特定の質問への答えが、2つのステージビューシーケンスの問題へと、私は複数のアニメーションが好きではなかった - あまりにも気が散る+は異なる文脈を暗示 - ので、私はscrollviewを移入終わりました双方の視点の段階で提示され、モーダルに提示された。モーダルスクロールビュー内の2番目のビューへのプログラムスライドがうまく機能します。したがって、同様の問題に対する別の解決策です。 –

答えて

2

「2番目のモーダル」vcを開始する必要があります。これは "prepareForSegue:"メソッドが行うものです。また、 "perform:"メソッドをオーバーライドする必要があります。これはあなたが考えるより少し複雑になるだろう。ここに役立ちますセグエがどのように動作するかの内訳ですされている場合...

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender; 

が呼び出され、「セグエ」に渡します。舞台裏で

- (id)initWithIdentifier:(NSString *)identifier source:(UIViewController *)source destination:(UIViewController *)source; 

が呼び出され、ここでは「segue」が作成されます。セグエを行うことができないこれらのうちで

「セグエ」オブジェクトは

(NSString *)identifier 
(UIViewController *)sourceViewController 
(UIViewController *)destinationViewController 

の特性を有します。これらは

secondView.modalTransitionStyle = UIModalTransitionStyle(...); 

"がセグエ" 遷移が選択された(...)されるビューコントローラ

SomeViewController *secondView = [SomeViewController alloc] initwithNibName:@"SomeViewController" bundle:nil]; 
次いで

ある

[[segue destinationViewController] setModalTransitionStyle:UIModalTransitionStyle(...)]; 

...手動割り当てに類似していますストーリーボードで。

最後

[[segue sourceViewController] presentModalViewController:destinationViewController animated:YES]; 

だけ

[self presentModelViewController:secondView animated:YES]; 

であるが、それがすべて起こる作るものです。あなたは基本的にあなたが仕事をしたいものを得るために、ボンネットの下にあるものと微調整する必要がありますが、それは可能です。

0

dismissViewControllerAnimated呼び出しの完了ブロックに、2番目のモーダルビューコントローラのperformSegueを配置する必要があります。 UINavigationControllerは、他のモーダルビューコントローラを提示しているときにプレゼンテーションを処理できません。

0

誰かが同じ質問をしている場合。

- (void)loginControllerDidRegister:(LoginController *)controller sender:(id)sender 
{ 
    NSLog(@"loginControllerDidRegister"); 
    [self dismissViewControllerAnimated:YES completion:^{ 
     [self performSegueWithIdentifier:@"RegistrationSegue" sender:sender]; 
    }]; 
} 
+1

あなたの「自己」がもう存在しない場合は、あなたがセグを実行することができないので、これは動作しません。 –

関連する問題