我创建了一个非常简单的故事板,它使用Popover演示文稿来显示另一个视图.在模拟器上,如果我运行这个iPad,它的工作原理.但是,如果我运行它为一个iPhone,而不是一个popover,它显示一个全屏视图,在原始视图之上.这可以;然而,没有办法解除它并返回原始屏幕.
我看过WWDC 2014视频“228 A Look inside演示控制器”,如果他们完全用代码构建用户界面,他们可以显示一个关闭按钮.
我也看过“411接口构建器新功能”会话,他们说这可以在Interface Builder中完成,但是它们没有显示出来,如果有人感兴趣的话,我们承诺说明如何在实验室中做到这一点.不幸的是,我没有参加WWDC 2014,或者知道有谁.我的Google搜索没有返回任何有用的.
解决方法
>将您的popover视图控制器作为根视图控制器设置为导航控制器.
>删除您当前使用的popover segue
>从显示弹出窗口的按钮重新连接到导航控制器.
在iPad上,你会得到一个popover,在iPhone上你会得到一个模态的演示文稿. iPad和iPhone都会显示导航控制器.根据您的用例,这可能是您也可能不是您想要的.这是一个关于故事板应该是什么样子的屏幕显示.
>
如果你真的希望你的视图控制器永远是一个popover离开你的故事板的方式,并添加一些这样的视图控制器,呈现popover-
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([segue.identifier isEqualToString:@"Your segue name"]) { UIViewController *yourViewController = segue.destinationViewController; yourViewController.modalPresentationStyle = UIModalPresentationPopover; UIPopoverPresentationController *popoverPresentationController = yourViewController.popoverPresentationController; popoverPresentationController.delegate = self; } }
呈现popover的视图控制器也需要响应此UIPopoverPresentationDelegate方法
- (UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller { return UIModalPresentationNone;//always popover. }
最后,您可以执行以下操作,只需将导航控制器添加到iPhone上的视图控制器的模态演示文稿,并将其移动到iPad上,而无需导航控制器.
离开你的故事板.
>注入导航控制器的正确位置是 – (UIViewController *)presentationController:(UIPresentationController *)controller viewControllerForAdaptivePresentationStyle:(UIModalPresentationStyle)样式.为了这个被调用,我们必须将自己设置为UIPopoverPresentationController的代表.
再次我们会在prepareForSegue中做到这一点:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([segue.identifier isEqualToString:@"Your segue name"]) { UIViewController *yourViewController = segue.destinationViewController; yourViewController.modalPresentationStyle = UIModalPresentationPopover; UIPopoverPresentationController *popoverPresentationController = yourViewController.popoverPresentationController; popoverPresentationController.delegate = self; } }
那么我们将在上面提到的委托方法中这样做
-(UIViewController *)presentationController:(UIPresentationController *)controller viewControllerForAdaptivePresentationStyle:(UIModalPresentationStyle)style { UIViewController *presentedViewController = controller.presentedViewController; UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:presentedViewController]; UIBarButtonItem *dismissButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonItemStyleDone target:self action:@selector(done:)]; presentedViewController.navigationItem.rightBarButtonItem = dismissButton; return navigationController; }
祝你好运!