目前多个模态视图控制器?
更新:
我再次遇到这个问题,并find另一种方法。 如果显示控制器没有embedded到导航控制器中,如果显示的控制器不是全屏,将会隐藏,并且会变成黑色。 方法setModalPresentationStyle:UIModalPresentationCurrentContext只能应用于导航控制器。 所以embedded呈现控制器在UINavigationController中,设置UIModalPresentationCurrentContext并呈现新的控制器 – 你会得到对话框控制器。
我正在展示search控制器,它有推动堆栈详细控制器的tableView。
详细的控制器可以给消息提供视图控制器,它由小UIView和半透明背景组成。
问题:当最后一个视图控制器出现时,它下面的所有视图控制器变成隐藏的,控制器,呈现search控制器变得可见。
这里我在做什么:
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。 从这张表中可以看到详细的视图,可以显示消息框。 消息框必须是另一个视图控制器。 当消息框显示时,前两个控制器都消失了。 这是问题。
尝试实现这一点的微不足道的方法就是创build你想要模式化呈现的风险投资并一个接一个呈现。 不幸的是,这是不会工作的。 你得到的只是第一个提出的风险投资,所有其他风险都无处可逃。 UIKit在这里不会与你合作。
http://xissburg.com/presenting-multiple-modal-view-controllers-at-once/
UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, 0); CGContextRef context = UIGraphicsGetCurrentContext(); [self.view.layer renderInContext:context]; UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext();
closures所有视图控制器上方的所有视图控制器。
苹果的文档如下:
如果您连续呈现多个视图控制器,从而构build呈现的视图控制器堆栈,则在堆栈中较低视图控制器上调用此方法将取消其立即子视图控制器以及该堆栈上的该子视图之上的所有视图控制器。 当发生这种情况时,只有最顶层的观点才会以animation的方式被驳回。 任何中间视图控制器都可以简单地从堆栈中移除。 最顶层的视图使用其模式转换样式,这可能不同于其他视图控制器在栈中使用的样式。
closures两个模式视图控制器。
[self.presentingViewController.presentingViewController dismissViewControllerAnimated:YES completion:NULL];
在某些情况下,你可以让每个模态表示的视图控制器呈现下一个。
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) }
这个答案可能看起来有点不合常规,但是它有效。 它可以让你“打开多个模式”,但一次只显示一个。 关键是只有一个模式,但使用Tab Bar Controller在View Controller之间切换。
- 将你的modal segue从蓝色(呈现) 视图控制器连接到一个模式容器(这只是一个普通的视图控制器 )
- 模式容器只包含一个容器视图 ,其唯一目的是embedded一个选项卡栏控制器 。
- 在容器视图中embedded一个选项卡栏控制器
- 每个选项卡可以是一个单独的视图控制器 ,代表“多模态”
- 将选项卡栏控制器的选项卡栏设置为隐藏
- 使用
tabBarController?.selectedIndex = 1
切换模态 - 通常用
dismissViewControllerAnimated(true, completion: nil)
closures模式dismissViewControllerAnimated(true, completion: nil)
它看起来像这样:
在navigationController
和viewController
本身上设置正确的viewController
。
self.navigationController.modalPresentationStyle = UIModalPresentationCurrentContext; vcToPresent.modalPresentationStyle = UIModalPresentationFormSheet; vcToPresent.preferredContentSize = CGSizeMake(650, 450); [self presentViewController:vcToPresent animated:YES completion:^{ self.navigationController.modalPresentationStyle = UIModalPresentationFormSheet; }];`