目前有多个模态视图控制器?

tri*_*777 14 iphone objective-c uiviewcontroller presentmodalviewcontroller ios

更新:
我再次遇到了这个问题,并找到了另一种方法.如果呈现控制器未嵌入导航控制器中,则如果呈现的控制器不是全屏并且将变为黑色,则将隐藏它.方法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];
Run Code Online (Sandbox Code Playgroud)

比表推动详细视图:

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

和详细的视图呈现消息框:

MessageController *controller = [[MessageController alloc] initWithNibName:@"MessageController" bundle:nil];
controller.message = message;
[self presentViewController:controller animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)

当它被解雇时,其下的所有控制器都变得可见.

更新:

我想要的是以模态方式呈现一个具有uitableview的视图控制器.从此表中显示将能够显示消息框的详细视图.消息框必须是另一个视图控制器.当显示消息框时,所有前两个控制器都会消失.这就是问题所在.

小智 11

关闭所呈现的视图控制器上方的所有视图控制器.

Apple的文档如下:

如果你目前在连续的几个视图控制器,从而构建呈现视图控制器的堆栈,调用视图控制器这种方法下的堆栈驳回其直接子视图控制器和堆栈上的孩子最重要的视图控制器.发生这种情况时,只有最顶层的视图以动画方式被删除; 任何中间视图控制器都可以从堆栈中删除.最顶层的视图使用其模态过渡样式被忽略,这可能与堆栈中较低的其他视图控制器使用的样式不同.

关闭两个模态视图控制器.

[self.presentingViewController.presentingViewController dismissViewControllerAnimated:YES completion:NULL];
Run Code Online (Sandbox Code Playgroud)

https://developer.apple.com/library/ios/documentation/uikit/reference/UIViewController_Class/Reference/Reference.html#jumpTo_51


Sli*_*ron 11

在某些情况下,您可以让每个模态呈现的视图控制器呈现下一个.

let window = UIApplication.sharedApplication().keyWindow!
if let modalVC = window.rootViewController?.presentedViewController {
    modalVC.presentViewController(vc, animated: true, completion: nil)
} else {
    window.rootViewController!.presentViewController(vc, animated: true, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)


Rob*_*hen 8

这个答案可能看起来有些不同寻常,但它确实有效.它允许您"打开多个模态",但一次只显示一个.关键是只有一个模态,但使用标签栏控制器视图控制器之间切换.

多个模态

  1. 将模态segue从蓝色(呈现)视图控制器连接到模态容器(它只是一个常规的视图控制器)
  2. 模态容器只包含一个容器视图,其唯一目的是嵌入一个选项卡栏控制器.
  3. 容器视图中嵌入标签栏控制器
  4. 每个选项卡可以是单独的视图控制器,表示"多个模态"
  5. 标签栏控制器标签栏设置隐藏
  6. 使用.在模态之间切换 tabBarController?.selectedIndex = 1
  7. 通常用关闭模态 dismissViewControllerAnimated(true, completion: nil)

它看起来像这样:

在此输入图像描述


Gtx*_*Gtx 5

尝试实现这一目标的简单方法是创建您想要以模态呈现的 VC,然后一个接一个地呈现。不幸的是,这行不通。你得到的只是第一个 VC 展示,其他所有的都无处可去。UIKit 不会在这里与您合作。

UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, 0);
CGContextRef context = UIGraphicsGetCurrentContext();
[self.view.layer renderInContext:context];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
Run Code Online (Sandbox Code Playgroud)

  • 现在似乎更好的方法(而不是使用图像)是在呈现视图控制器之前设置`self.navigationController.modalPresentationStyle = UIModalPresentationCurrentContext`,然后在完成处理程序中重置值。见 http://stackoverflow.com/a/15794051/339925 (4认同)