繁体   English   中英

如何显示ios8的默认PopOVer?

[英]How to display default PopOVer of ios8?

我正在尝试使用swift作为在ios8中显示弹出框

    @IBAction func showPopUP(sender: AnyObject) {

        let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
        let popVC = storyboard.instantiateViewControllerWithIdentifier("pop")as! PopViewController

        popVC.modalPresentationStyle = UIModalPresentationStyle.Popover
        self.presentViewController(popVC, animated: true, completion: nil)

        var presentationController = UIPopoverPresentationController()
        presentationController.permittedArrowDirections = UIPopoverArrowDirection.Left | UIPopoverArrowDirection.Right
        presentationController.sourceView = popVC.view
        presentationController.sourceRect = popVC.view.frame

    }
}

但是给我一个错误

由于未捕获的异常'NSGenericException'而终止应用程序,原因:'-[UIPopoverController init]不是有效的初始化程序。 您必须调用-[UIPopoverController initWithContentViewController:]。

我在这里做错了什么?

编辑:我想显示作为iOS 8默认的弹出窗口

在此处输入图片说明

这是GoogleDrive上项目的链接: https ://drive.google.com/open ? id = 0B6dTvD1JbkgBM3F6RXhjVGFvZmM & authuser =0

您不应该自己创建一个新的UIPopoverPresentayionController ,而应该从提供的控制器中请求该控制器:

var presentationController = popVC.popoverPresentationController

另外,当您这样做时:

presentationController.sourceView = popVC.view
presentationController.sourceRect = popVC.view.frame

您使用了错误的视图和框架。 该视图应该是从中显示弹出窗口的视图,而不是弹出窗口视图,而rect是源视图中显示源的区域(即箭头来自的区域)。

您不需要初始化UIPopoverPresentationController ,您可以从viewcontorller获取要呈现为UIPopoverPresentationController引用。

@IBAction func showPopUP(sender: AnyObject) {

    let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
    let popVC = storyboard.instantiateViewControllerWithIdentifier("productcontroller")as! ProductController

    popVC.modalPresentationStyle = UIModalPresentationStyle.Popover
    self.presentViewController(popVC, animated: true, completion: nil)

    var presentationController = popVC.popoverPresentationController  //Here, you can go with
    presentationController!.permittedArrowDirections = UIPopoverArrowDirection.Left | UIPopoverArrowDirection.Right
    presentationController!.sourceView = popVC.view
    presentationController!.sourceRect = popVC.view.frame

}   

享受编码!

首先,您将UIPopoverPresentationControllerDelegate的Deleagte设置为self。 然后将该方法实现为

func adaptivePresentationStyleForPresentationController(PC: UIPresentationController) -> UIModalPresentationStyle {
        return UIModalPresentationStyle.None
    }

这告诉您的iPhone将VC强制显示为弹出窗口。

并以与

 @IBAction func showPopUP(sender: AnyObject) {

        let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)            
        let popVC = storyboard.instantiateViewControllerWithIdentifier("pop")as! PopViewController            
        popVC.modalPresentationStyle = UIModalPresentationStyle.Popover
        popVC.popoverPresentationController!.delegate = self
        let popOverController = popVC.popoverPresentationController
        popOverController!.sourceView = sender as! UIView
        popOverController!.sourceRect = sender.bounds
        popOverController?.permittedArrowDirections = .Any
        self.presentViewController(popVC, animated: true, completion: nil)


    } 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM