10

私は以下のようなビューコントローラをモーダルプレゼンテーションしようとしています:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"addPopover"];
vc.view.backgroundColor = [UIColor clearColor];
self.modalPresentationStyle = UIModalPresentationCurrentContext;
[self presentModalViewController:vc animated:YES];

現在使用してUIModalPresentationCurrentContextいる手段は、このビューを透明な背景で表示し、新しいビューの背後にある他のビューを表示できることを意味します。ただし、トランジションを表示できなくなります。

なぜ何かアイデアはありますか?または、どうすればこれを回避できますか?ありがとう。

4

3 に答える 3

25

modalPresentationStyle = UIModalPresentationCurrentContextこのrootViewControllerの上に新しいフルスクリーンviewControllerを表示していない場合は、UIWindowのrootViewControllerに設定することでこれを実現できました。私はこのようなことをしました:

UIViewController *rootViewController = [UIApplication sharedApplication].delegate.window.rootViewController;
rootViewController.modalPresentationStyle = UIModalPresentationCurrentContext;
[self presentViewController:vc animated:YES completion:nil];

これを、ウィンドウのrootViewControllerとしてのUINavigationControllerと他のさまざまなカスタムViewControllerの両方で試しました。ウィンドウのrootViewControllerが何が起こっているかを知っている限り、どのサブviewControllerもpresentViewController:animated:completion:、基になるビューをブラックアウトせずに呼び出すことができるようです。

ただし、ウィンドウのrootViewControllerの上に別のviewControllerを表示するとします。そして、この新しいviewControllerが表示されmodalPresentationStyle = UIModalPresentationFullScreen(つまり、画面が表示されます)、modalPresentationStyle = UIModalPresentationCurrentContextその最上位のviewControllerを呼び出す必要があります。

要約すると:

  • UINavigationController-> UIViewController(s)(プッシュおよびポップインおよびポップアウト可能)がある場合はmodalPresentationStyle = UIModalPresentationCurrentContext、UINavigationControllerを設定します。
  • UINavigationController-> UIViewController-> new-UIViewController(modalPresentationStyleがUIModalPresentationFullScreenに設定されている)がある場合modalPresentationStyle = UIModalPresentationCurrentContextは、new-UIViewControllerを設定します。

うまくいけば、これはあなたたちにもうまくいくでしょう!

于 2012-10-26T01:09:57.397 に答える
11

フルスクリーンモーダルでは、下のレイヤーを表示することはできません。私が知っている迷惑。

あなたのコードから、「addPopover」は実際には全画面表示であり、コンテンツはサブセクションとしてあり、残りは透明であると想定しています。

これを試して:

vc.modalPresentationStyle = UIModalPresentationCurrentContext;
vc.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self presentViewController:vc animated:YES completion:NULL];

注:これを上にポップすると、ビューの残りの部分と対話できないことをユーザーに知らせるために、低アルファの背景色を追加することをお勧めします...

于 2012-10-18T14:44:44.593 に答える
0

T氏の提案はほぼ完璧に機能し、提示されたビューコントローラのトランジションアニメーションが失われるだけです。

appDelegates rootviewControllerの表示スタイルも設定しているため、その時点から表示されるすべてのビューの遷移アニメーションも削除されます。

私の修正は、Viewcontrollerが閉じられたときに、AppDelegatesrootViewControllerのプレゼンテーションスタイルをデフォルトに戻すことでした。

次を使用して、rootViewControllerの表示スタイルをデフォルトに戻すという点でpresentedViewControllerを閉じるボタンがあります。

    UIViewController *rootViewController = [[[[UIApplication sharedApplication] delegate] window] rootViewController];
    rootViewController.modalPresentationStyle = UIModalPresentationFullScreen;

それが他の誰かがこの問題に困惑するのを助けることを願っています。

于 2014-03-02T00:21:22.377 に答える