2012-10-27 6 views
8

を解雇されていません。ナビゲーションバーにボタンがあるビューコントローラが1つあります。ボタンをタップすると、別のビューコントローラをモーダルとして表示するためにセグを使用しています。モーダルビューコントローラには、ナビゲーションバーに[キャンセル]ボタンと[保存]ボタンがあります。ストーリーボードでは、モーダルボタンアイテムは、新しいExitアクションにリンクされています。このアクションは、親ビューコントローラに巻き戻し、モーダルを閉じ、アクションハンドラを呼び出します。iOSの6絵コンテ:モーダルビューは、私はXcodeの4.5とiOS 6</p> <p>私はストーリーボードを使用しているユニバーサルアプリケーションを構築していますを使用しています

これはiPhoneで問題なく動作しますが、iPadで問題が発生しています。 iPadでは、モーダルがフルスクリーンで表示されると、すべてが機能します。モードをページシートまたはフォームシート(私の場合は望ましい動作)に変更すると、アクションハンドラが呼び出されますが、モーダルビューコントローラは自動的に解除されません。

この動作を見た他の人はいますか?それを修正するために何かしたことはありますか?

ありがとうございます。

答えて

6

私はちょうど同じ問題に遭遇したので、これについて質問してくれてありがとう。私はバグだと思うが、まだアップルに提出していない。その間、簡単な回避策は、unwind:の実装で(すなわち、終了アイコンを通じてアンワインドセグに接続されたアクションメソッドで)dismissViewController:animated:を呼び出すことです。これにより、モーダルビューを自分自身で調整します。

この解決策について私が心配しているのは、こののバグでAppleが最終的に修正した場合、この回避策を使用してコードを修正するかどうかです。時間だけが教えてくれるでしょう...

後で編集します。:私ははるかに良い回避策を発見しました。アンワインドしたいクラスの親(コンテナ)クラスをサブクラス化し、その代わりにunwindを実装します。例えば、私のアプリでは、状況は次のようになります。バックDetailViewControllerへThirdViewControllerから

UISplitViewController 
    UINavigationController 
     MasterViewController 
    UINavigationController 
     DetailViewController ----> modal segue ----> ThirdViewController 

終了/アンワインドセグエは、バグを示し - unwind:実装が呼び出されますが、フォームビューが却下されていません。しかし、私はUISplitViewControllerをサブクラス化し、そこにunwind:を実装すると、うまく動作します。 (unwind:の実装は空であってもかまいません;フォームビューが自動的に解除されるということです)これはコンテナビューコントローラと関係があり、コンテナに処理させることで解決できます。

モーダルビューコントローラは自動的に却下したが、Appleの例hereでは、彼らはセグエのためのモーダルトランジションを使用しますが、その後、明示的にdismissViewControllerAnimatedを呼び出した場合https://github.com/mattneub/Programming-iOS-Book-Examples/tree/master/ch19p561containerViewControllerStoryboard3Bug

+0

これは私のために働いた。正しい答えとして受け入れられるべきです。 – MiuMiu

4

クールにアップロードし、私のサンプルプロジェクトを参照してください:完了:中それを解除するア​​クションを巻き戻し(終了)します。私は私がやったことだった、同じ問題を持っていた

2

- (IBAction)closeSalesJournal:(UIStoryboardSegue *)segue 
{ 
    // Unwind Segue 
    NSLog(@"Closed Sales journal VC"); 

    // For iPad, need to dismiss the view controller manually 
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) { 
     [self dismissViewControllerAnimated:YES completion:nil]; 
    } 
} 

そのように、私はiPhoneのための標準的な方法を残すとiPadで解雇を強制的に確信しています。

0

私はこれに似た問題がありました。私のモーダルセグは元通りになりません。時間が無駄に過ぎてしまったので、私は問題を理解しました。私の責任です。

宛先コントローラには- (BOOL)canPerformUnwindSegueAction:(SEL)action fromViewController:(UIViewController *)fromViewController withSender:(id)senderと書かれていませんでした。私が書いたばかりの新しいセグを期待していなかったので、それはNOを返していた。本質的に、私の新しいセグーは、他のコードによってゆるされないように言われていました。

関連する問題