在Swift中实现PopOver

时间:2015-07-10 04:29:44

标签: ios swift uiviewcontroller popup popover

我想显示一个弹出菜单,而不使用nib。我不喜欢使用nib,因为头痛实现了一个简单的功能委托。我成功使用modalPresentationStyle作为PopoverViewController显示为Popover,并且可以使用以下代码正常工作。

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var btnShowPopOver: UIButton!
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


    @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.preferredContentSize = CGSizeMake(320, 240)
        popVC.popoverPresentationController!.delegate = self


        let popOverController = popVC.popoverPresentationController
        popOverController!.sourceView = sender as! UIView // where to stick the bar item in which view
        popOverController!.sourceRect = CGRectMake(70,30, 0, 0) //where to stick the bar

        popOverController?.permittedArrowDirections = nil
        self.presentViewController(popVC, animated: true, completion: nil)


    }




}


extension ViewController :UIPopoverPresentationControllerDelegate {

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


    func popoverPresentationControllerDidDismissPopover(popoverPresentationController: UIPopoverPresentationController) {

        var controller = popoverPresentationController.presentedViewController as! PopViewController
         println(" this is data from pop view controller \(controller.textField.text)")

    }


}

Apple doc

  

Popover控制器仅适用于iPad设备。   尝试在其他设备上创建一个会导致异常。

我在真实设备iphone-6上进行了测试,并且工作正常。我喜欢这个Popover

我是否应该根据Apple文档使用Popover?因为它在iphone中运行良好,我的应用程序以后会因使用它而被拒绝吗?

1 个答案:

答案 0 :(得分:0)

  

从iOS8开始,我们现在可以创建弹出窗口,这将是相同的   在iPhone上,就像在iPad上一样,对于那些对他们来说特别棒的人来说   制作通用应用,因此无需制作单独的视图或代码。

来源:UIPopoverController for iphone not working?

看看这个答案:

https://stackoverflow.com/a/14789022/3202193

https://stackoverflow.com/a/30418212/3202193

iOS 9的每个发布文档中,他们也说:

UIPopoverController类用于管理弹出窗口中的内容呈现。您使用弹出窗口暂时显示信息。弹出窗口内容位于现有内容之上,背景自动变暗。在用户点击弹出窗口之外或您明确关闭它之前,弹出窗口仍然可见。 Popover控制器仅适用于 iPad设备。尝试在其他设备上创建一个会导致异常。

修改

我认为您已经使用了iOS 8.0及更高版本中可用的UIPopoverPresentationController

UIPopoverControllerUIPopoverPresentationController是Apple提供的两种不同的东西。