19

更新:
私はこの問題に再び直面し、別の方法を見つけました。提示コントローラがナビゲーション コントローラに組み込まれていない場合、提示コントローラがフルスクリーンでない場合は非表示になり、黒くなります。メソッド setModalPresentationStyle:UIModalPresentationCurrentContext は、ナビゲーション コントローラーにのみ適用できます。したがって、UINavigationController に提示コントローラーを埋め込み、それに UIModalPresentationCurrentContext を設定し、新しいコントローラーを提示します。ダイアログ コントローラーが得られます。

検索コントローラーを提示しています。これには、スタック詳細コントローラーをプッシュする tableView があります。

詳細コントローラーはビュー コントローラーにメッセージを表示できます。これは、小さな UIView と半透明の背景で構成されます。

問題: 最後のビュー コントローラーが提示されると、その下にあるすべてのビュー コントローラーが非表示になり、提示された検索コントローラーが表示されるようになります。

ここで私がやっていること:

SearchViewController *viewController = [[SearchViewController alloc] initWithNibName:@"SearchViewController" bundle:nil];
viewController.data = dataArray;

UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
[self.navigationController setModalPresentationStyle:UIModalPresentationCurrentContext];
[self.navigationController presentViewController:navigationController animated:YES completion:nil];

テーブルが詳細ビューをプッシュするよりも:

DetailViewController *viewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
[viewController setHidesBottomBarWhenPushed:YES];
viewController.dataItem = [data objectAtIndex:(NSUInteger) [indexPath row]];
[self.navigationController pushViewController:viewController animated:YES];

メッセージボックスを提示する詳細ビュー:

MessageController *controller = [[MessageController alloc] initWithNibName:@"MessageController" bundle:nil];
controller.message = message;
[self presentViewController:controller animated:YES completion:nil];

閉じると、その下にあるすべてのコントローラーが表示されます。

アップデート:

私が望んでいたのは、uitableview を持つビュー コントローラーをモーダルに提示することだけでした。このテーブルから、メッセージ ボックスを表示できる詳細ビューを表示します。メッセージ ボックスは、別のビュー コントローラーである必要があります。メッセージ ボックスが表示されると、前の 2 つのコントローラはすべて消えます。それが問題です。

4

6 に答える 6

10

この答えは少し型にはまらないように思えるかもしれませんが、うまくいきます。「複数のモーダルを開く」ことができますが、一度に表示できるのは 1 つだけです。重要なのはモーダルを 1 つだけにすることですが、Tab Bar Controllerを使用してView Controllerを切り替えます。

複数のモーダル

  1. モーダル セグエを青い (提示している)ビュー コントローラーからモーダル コンテナー (通常のビュー コントローラー)に配線します。
  2. モーダル コンテナは、唯一の目的がTab Bar Controllerを埋め込むことであるContainer Viewだけを保持します。
  3. コンテナー ビュー内にタブ バー コントローラーを埋め込む
  4. 各タブは、「複数のモーダル」を表す個別のView Controllerにすることができます
  5. Tab Bar ControllerTab Bar非表示に設定します
  6. を使用してモーダルを切り替えますtabBarController?.selectedIndex = 1
  7. モーダルを通常どおり閉じますdismissViewControllerAnimated(true, completion: nil)

次のようになります。

ここに画像の説明を入力

于 2015-08-10T19:15:49.500 に答える
5

それを達成しようとする簡単な方法は、モーダルに提示したい VC を作成し、次々に提示することです。残念ながら、これはうまくいきません。得られるのは最初に提示された VC だけであり、他のすべての VC はどこにも行きません。UIKit はここであなたに協力しません。

UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, 0);
CGContextRef context = UIGraphicsGetCurrentContext();
[self.view.layer renderInContext:context];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
于 2013-11-04T04:53:58.950 に答える
1

とそれ自体の両方に正しい値を設定しmodalPresentationStyleます。navigationControllerviewController

self.navigationController.modalPresentationStyle = UIModalPresentationCurrentContext;
vcToPresent.modalPresentationStyle = UIModalPresentationFormSheet;
vcToPresent.preferredContentSize = CGSizeMake(650, 450);

[self presentViewController:vcToPresent animated:YES completion:^{
    self.navigationController.modalPresentationStyle = UIModalPresentationFormSheet;
}];`
于 2015-12-02T19:08:06.443 に答える