为了账号安全,请及时绑定邮箱和手机立即绑定

iOS 8 iPhone上的UIPopoverPresentationController

iOS 8 iPhone上的UIPopoverPresentationController

iOS
幕布斯6054654 2019-10-09 16:22:16
有谁知道是否UIPopoverPresentationController可以在iPhone上显示弹出窗口?想知道苹果是否在iOS 8上添加了此功能,以试图为iPad和iPhone创建更统一的演示控制器。不确定是否可以从Beta提问/回答问题。在这种情况下,我将其删除。
查看完整描述

3 回答

?
慕容708150

TA贡献1831条经验 获得超4个赞

您可以UIModalPresentationFullScreen使用adaptivePresentationStyleForPresentationController:通过提供的方法来覆盖默认的自适应行为(在紧凑的水平环境中,即iPhone)  UIPopoverPresentationController.delegate。


UIPresentationController使用此方法询问要使用的新演示文稿样式,在您的情况下,简单地返回UIModalPresentationNone将导致UIPopoverPresentationController呈现为弹出窗口而不是全屏。


这是一个使用情节提要中的segue设置的弹出窗口示例,从UIBarButtonItem到“ 模态呈现 ”UIViewController


class SomeViewController: UIViewController, UIPopoverPresentationControllerDelegate {


    // override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) { // swift < 3.0

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

        if segue.identifier == "PopoverSegue" {

            if let controller = segue.destinationViewController as? UIViewController {

                controller.popoverPresentationController.delegate = self

                controller.preferredContentSize = CGSize(width: 320, height: 186)                

            }

        }

    }


    // MARK: UIPopoverPresentationControllerDelegate


    //func adaptivePresentationStyleForPresentationController(controller: UIPresentationController!) -> UIModalPresentationStyle { // swift < 3.0

    func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle {

        // Return no adaptive presentation style, use default presentation behaviour

        return .None

    }

}

WWDC 2014会议214“ iOS8中的View Controller Advancement”中提到了此技巧(36:30)

查看完整回答
反对 回复 2019-10-09
?
largeQ

TA贡献2039条经验 获得超7个赞

我找到了一些解决方法。


在Xcode6.1上,使用presentationController.delegate代替popoverPresentationController.delegate。


- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

{

    if ([segue.identifier compare:@"showPopOver"] == NSOrderedSame) {

        UINavigationController * nvc = segue.destinationViewController;

        UIPresentationController * pc = nvc.presentationController;

        pc.delegate = self;

    }

}


#pragma mark == UIPopoverPresentationControllerDelegate ==

- (UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller

{

    return UIModalPresentationNone;

}

在WWDC 2014“ iOS8中的View Controller Advances”中,以下代码可以显示iPhone上的弹出窗口。


- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

{


    UINavigationController * nvc = segue.destinationViewController;

    UIPopoverPresentationController * pvc = nvc.popoverPresentationController;

    pvc.delegate = self;

}


#pragma mark == UIPopoverPresentationControllerDelegate ==

- (UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller

{

    return UIModalPresentationNone;

}

但是在Xcode 6.1上,这些代码显示了FullScreen演示...(nvc.popoverPresentationController为nil)


我怀疑这可能是苹果的错误。


查看完整回答
反对 回复 2019-10-09
  • 3 回答
  • 0 关注
  • 855 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信