8

Xcode 4.5 と iOS 6 を使用しています。

ストーリーボードを使用するユニバーサル アプリケーションを構築しています。ナビゲーション バーにボタンがあるビュー コントローラーが 1 つあります。ボタンがタップされると、セグエを使用して別のビュー コントローラーをモーダルとして表示します。モーダル ビュー コントローラーには、ナビゲーション バーに [キャンセル] ボタンと [保存] ボタンがあります。ストーリーボードでは、モーダル ボタン項目は、親ビュー コントローラーに巻き戻し、モーダルを閉じ、アクション ハンドラーを呼び出す新しいExitアクションのアクションにリンクされています。

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

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

ありがとうございました。

4

4 に答える 4

6

同じ問題に遭遇したばかりなので、これについて質問していただきありがとうございます。バグだと思いますが、まだ Apple に報告していません。それまでの間、簡単な回避策はdismissViewController:animated:unwind:実装で (つまり、[終了] アイコンを介してアンワインド セグエに接続されたアクション メソッドで) 呼び出し、モーダル ビューを自分で消すことです。

この解決策に関する私の唯一の懸念は、これバグであり、Apple が最終的に修正した場合、彼らの修正はこの回避策を使用するコードを壊すのでしょうか? 時間だけが教えてくれます...

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

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

ThirdViewController から DetailViewController に戻る exit / unwind セグエはバグを示しています -unwind:実装は呼び出されますが、フォーム ビューは閉じられません。しかし、UISplitViewController をサブクラス化してunwind:そこに実装すると、問題なく動作します。(unwind:実装は空でもかまいません。要点は、フォーム ビューが自動的に閉じられることです。) したがって、明らかにこれはコンテナー ビュー コントローラーに関係する問題であり、コンテナーに処理させることで解決できます。

https://github.com/mattneub/Programming-iOS-Book-Examples/tree/master/ch19p561containerViewControllerStoryboard3Bugにアップロードされたサンプル プロジェクトを参照してください。

于 2012-11-11T20:05:52.783 に答える
4

モーダル ビュー コントローラーが自動的に閉じられた場合はクールですが、Apple の例hereでは、セグエにモーダル トランジションを使用しますが、アンワインド (Exit) アクションで明示的に disconnectViewControllerAnimated:completion: を呼び出して閉じます。

于 2013-01-18T16:51:12.997 に答える
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 で強制終了することは確実です。

于 2013-08-11T12:47:32.717 に答える