2

私はデュアル iPad/iPhone アプリケーションに取り組んでいます。

iPad のみで発生している問題があります。

  • ルート ビュー コントローラーは、iPad では UISplitViewController、iPhone では UITabBarController です。
  • ルート コントローラの上にモーダル UIViewController を表示できます
  • モーダル UIViewController は、前のモーダル コントローラの上に表示できます
  • iPad では、モーダル コントローラーは UIModalPresentationStyle.PageSheet を使用しています。

iPad から最上位のモーダル コントローラーを閉じる以外はすべて機能します。メソッドは呼び出されますが、モーダル ビュー コントローラーは閉じられません。前のモーダル コントローラーから DismissModalViewControllerAnimated を呼び出して閉じます。

これがiPadで機能しない理由はありますか?

いずれの場合も、親コントローラーから PresentModalViewController と DismissModalViewControllerAnimated を呼び出して、その子モーダル コントローラーを動作させます。

私は MonoTouch を使用しています (メソッドのケーシングでわかります) が、それはおそらく無関係です。Obj-C でも回答を得ることができます。

更新、以下はそれが何をすべきかをより明確にするかもしれません:

  • ルート => モーダル A => モーダル B
  • モーダル B を閉じると、モーダル A に戻るだけです
  • Modal Aを閉じると、ルートに戻るだけです
4

2 に答える 2

1

正しいビューを却下していると確信していますか? モーダル ビュー内で、ボタン クリックでビューを閉じたいとしましょう。そのボタンのメソッドで、DismissModalViewControllerAnimated メソッドを呼び出す必要があります。言うだけ

[self dismissModalViewControllerAnimated:YES];
  • ルートからモーダル ウィンドウを表示する
  • 終了したら、モーダル ビューのコントローラーからビューを閉じます。

コントローラーをどのように提示および破棄しようとしているのかを確認せずに問題を実際に診断することは困難ですが、それはうまくいくはずです。新しいビューが表示されたら、親コントローラーから何もする必要はありません...

于 2010-10-21T18:49:15.147 に答える
1

回避策を見つけました。それを修正するには、これらの条件をすべて満たす必要がありました。

  1. 最初のモーダルにはデフォルトの ModalPresentationStyle があります
  2. 2 番目のモーダルには UIModalPresentationStyle.PageSheet があります
  3. 2 番目のモーダルは、最初のモーダルの ViewDidAppear に表示されます。何らかの理由で、BeginInvokeOnMainThread から PresentModalViewController を呼び出す必要がありました。(MonoTouch のワンライナー) これは、Windows の開発とメッセージ ポンプから学んだトリックです。iPhone 開発者がタイマーを使って同様の回避策を講じているのを見たことがありますが、これははるかに優れています。

アプリストアでこれを入手するのに問題がある場合は、ポストバックします. しかし今のところ、それは私たちにとって良い解決策です。

于 2010-10-22T22:18:43.317 に答える