更新:
私はこの問題に再び直面し、別の方法を見つけました。提示コントローラがナビゲーション コントローラに組み込まれていない場合、提示コントローラがフルスクリーンでない場合は非表示になり、黒くなります。メソッド 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 つのコントローラはすべて消えます。それが問題です。