2011-06-24 11 views
1

ビューコントローラBからモーダルビューコントローラCを表示しようとしています.Bのビューはフルスクリーンをカバーしておらず、別のビューコントローラAのサブビューです。私が試したときに見たものモーダルはフルスクリーンをカバーしていますが、スクリーンの特定の場所をタップすると、コントロールはAのビューに「通過」します。サブモードの現在のモーダルViewController

私はAから何らかの種類の委任によってモーダルを提示することでこれを回避できますが、なぜこれが起こっているのかわかりません!結局のところ、あなたのビューの1つを管理するタブバーコントローラがあり、モーダルビューを表示しようとすると、それは全画面をうまくカバーします。舞台裏でいくつかの魔法がありますか?

答えて

10

私は、モーダルの実装方法上の任意の公式ドキュメントがあるとは思わないが、任意のビューがUIApplicationUIWindowを取得し、rootViewControllerプロパティに... -presentModalを呼び出すことができます。これはあなたのモーダルをフルスクリーンにする効果を持ちます。私は同じ効果を達成する他の方法があると確信しています。そのシナリオでは

[[[[UIApplication sharedApplication] keyWindow] rootViewController] presentModalViewController:myModalVC animated:YES]; 

、あなたはaddSubview使用して、すべてのビューコントローラ用に独自の「モーダル」メソッドを実装する必要がありますとbringSubviewToFrontを:.私は私の大きなプロジェクトの一つでこれを行いました。ここでモーダルビューとは異なる振る舞いが必要でした。

+0

は、私がやったこと...それはしかし、やや物足りないようです。たとえば、モーダルにモーダルを表示しようとすると、この方法は機能しません。これは、2番目のモーダルが最初のモーダルの下に表示されるためです。 – Ying

+0

質問が更新されました – RyanR

+0

確かに、私はルートビューコントローラを呼び出すことで正確に行っています。これは依然として最高の打撃であるようです。 – Ying

2

これが私の仕事:

UIViewController* vc = [[[UIViewController alloc] init] autorelease]; 
UIWindow* keyWindow = [[UIApplication sharedApplication] keyWindow]; 
UIView* topView = [[keyWindow subviews] objectAtIndex:[[keyWindow subviews] count] - 1]; 
vc.view = topView; 

[vc presentModelViewController... 

は基本的に、あなたは新しいのUIViewControllerを作成し、(ユーザが現在見ている図である)メインウィンドウの一番上のビューに取り付けます。

+0

メッセージdismissModalViewControllerAnimated:モーダルビューのコントローラーで、ソリューションEladのビューが閉じられなくなったようです... – Daniel

+1

新しい表記で同じ: UIView * topView = [[UIApplication sharedApplication] .keyWindow.subviews lastObject]; – Diwann

0

シンプルですが、受け入れと効率についてはわかりません。これは私が使用しているものです。

  1. すべてのビューコントローラをrootViewの下のメインビューに埋め込みます。
  2. すべてのモーダルビューをrootViewに追加し、mainViewのuserInteractionEnabledフラグを無効にします。モーダルビューはrootViewに追加し、mainViewでは追加しないでください。
  3. 完了したら、mainViewのユーザー操作を再度有効にしてください。これは実際にはこのことができます

希望...

関連する問題