ios - 在 Swift 中实现 PopOver

标签 ios swift uiviewcontroller popup popover

我想在不使用 nib 的情况下显示弹出菜单。我不喜欢使用 nib,因为实现简单功能的委托(delegate)令人头疼。我成功地将 modalPresentationStyle 用作 Popover 以将 ViewController 显示为 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 controllers are for use exclusively on iPad devices. Attempting to create one on other devices results in an exception.

我在真实设备 iphone-6 上测试过它,它工作正常..我喜欢这个 Popover

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

最佳答案

Since iOS8 we are now able to create popovers, that will be the same on iPhone, as on iPad, which would be especially awesome for those who make universal apps, thus no need to make separate views or code.

来源:UIPopoverController for iphone not working?

看看这个答案:

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

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

iOS 9 的每个版本文档中他们还说:

UIPopoverController 类用于管理弹出窗口中内容的呈现。您使用弹出窗口来临时显示信息。弹出框内容叠加在现有内容之上,背景自动变暗。弹出窗口保持可见,直到用户点击弹出窗口外部或您明确关闭它。 Popover Controller 专供 iPad 设备 使用。尝试在其他设备上创建一个会导致异常。

编辑

我想你用过 UIPopoverPresentationController在 iOS 8.0 及更高版本中可用。

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

关于ios - 在 Swift 中实现 PopOver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31332479/

相关文章:

ios - 为什么 app delegate 应该为其他 viewController 中使用的属性创建实例?

ios - 如何在 ios/swift 上添加自己的 header

iphone - 如何在 UIViewController 之外创建 UIView?

ios - 在 iOS 中设置 Parse

ios - openFileOutput() 、 opernFileInput() 在 iOS 中等效(将 Android 应用程序移植到 iOS 平台)

iphone - 检查数字是 float 还是整数

ios - objective-c - 从 appDelegate 检测当前 View

javascript - Iphone,负边距导致滑出菜单中的位置漂移

ios - 如何清除 iOS 应用程序中的 safari 缓存?

ios - 两个没有动画的 UIViewController 之间的转换