在 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的主要内容,如果未能解决你的问题,请参考以下文章