ios8 – 如何在自适应故事板中关闭iPhone弹出窗口

我是iOS开发的新手,我正在尝试同时学习故事板,Swift和iOS 8的新功能.

我创建了一个非常简单的故事板,它使用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;
}

祝你好运!

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...