在 Swift 中实现 PopOver

Posted

技术标签:

【中文标题】在 Swift 中实现 PopOver【英文标题】:Implement PopOver in Swift 【发布时间】:2015-07-10 04:29:44 【问题描述】:

我想显示一个弹出菜单而不使用 nib。我不喜欢使用 nib,因为实现一个简单功能的委托很头疼。我成功地将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 控制器专供 iPad 设备使用。 尝试在其他设备上创建一个会导致异常。

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

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

【问题讨论】:

太棒了! :) 它适用于 iPhone 5 和 iPhone 4 吗? 是的...我喜欢这个..但是苹果文档说只在 iPad 设备上使用它所以我应该使用它还是不使用它? 太好了,您的问题将有助于其他人通过 Swift 语言在 iPhone 中创建弹出框。 (Y) 【参考方案1】:

ios8 开始,我们现在可以创建弹出框了,这也是一样的 在 iPhone 上,就像在 iPad 上一样,这对于那些 制作通用应用程序,因此无需制作单独的视图或代码。

来源:UIPopoverController for iphone not working?

看看这个答案:

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

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

在iOS 9 的每次发布文档中,他们也这样说:

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

编辑

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

UIPopoverController 和 UIPopoverPresentationController 是 Apple 提供的两个不同的东西。

【讨论】:

@copeME 我希望你必须使用 iOS>8 。但也请在 iOS 7 模拟器或设备中进行测试。希望一切顺利。 我没有那个..并且需要时间在模拟器中下载..反正很快就会弄清楚 @copeME 好的。让我知道 :) 因为我也喜欢 iPhone 中应该提供的弹出框 @copeME 我已经更新了答案。你做得很完美。您可以在 iOS 8 及更高版本中通过使用 UIPopoverPresentationController 显示弹出框

以上是关于在 Swift 中实现 PopOver的主要内容,如果未能解决你的问题,请参考以下文章

swift 样本机协议在swift中实现

swift 在swift中实现整数结构

在 Swift 中实现哈希表?

swift 在Swift 3中实现APNs处理

这是如何在 swift 4 中实现的?

swift 在Swift中实现的GraphQL数据结构