弹出 UIViewController
Posted
技术标签:
【中文标题】弹出 UIViewController【英文标题】:Popup UIViewController 【发布时间】:2016-05-13 09:07:43 【问题描述】:我正在尝试制作一个弹出窗口,该弹出窗口将通过按下按钮呈现。尝试按照我在谷歌中找到的说明进行操作,但我的弹出视图以全屏形式呈现,并且其背景为黑色。 这是我的代码:
class ViewController: UIViewController, UIPopoverPresentationControllerDelegate
@IBAction func someButtonPressed(sender: UIButton)
let storyboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let popupVC = storyboard.instantiateViewControllerWithIdentifier("hello") as! popupViewController
popupVC.modalPresentationStyle = .Popover
popupVC.preferredContentSize = CGSizeMake(300, 300)
let pVC = popupVC.popoverPresentationController
pVC?.permittedArrowDirections = .Any
pVC?.delegate = self
pVC?.sourceView = sender
pVC?.sourceRect = CGRect(x: 100, y: 100, width: 1, height: 1)
presentViewController(popupVC, animated: true, completion: nil)
我做错了什么?
【问题讨论】:
您可以使用这个 pod:EzPopup (github.com/huynguyencong/EzPopup) 【参考方案1】:要使您的视图控制器显示为弹出窗口,您应该设置以下内容:
popupVC.modalPresentationStyle = .OverCurrentContext
popupVC.modalTransitionStyle = .CrossDissolve
您还应该设计视图控制器的位置、大小,使其看起来像一个弹出窗口。
这是我之前做的弹出窗口。
【讨论】:
这是否可以通过编程方式实现。请解释 @n-der:你想以编程方式做什么?请解释一下。 我想以编程方式将 UICollectionViewController 呈现为弹出窗口。谢谢。 @N.Der,是的,UIViewController
的任何部分(或子类)都可以。【参考方案2】:
在父控制器:
let vc = ViewController()
vc.modalPresentationStyle = .overCurrentContext
vc.modalTransitionStyle = .crossDissolve
present(vc, animated: true, completion: nil)
在弹出的控制器中,使用它来启用在后台显示父控制器:
self.definesPresentationContext = true
别忘了为您的弹出式控制器设置一个半透明背景。
-- 参考自:Presenting a popup view controller programmatically - Reddit--
【讨论】:
【参考方案3】:另一个简单的解决方案,使用 EzPopup (https://github.com/huynguyencong/EzPopup)。非常简单,只需几行代码:
// init YourViewController
let contentVC = ...
// Init popup view controller with content is your content view controller
let popupVC = PopupViewController(contentController: contentVC, popupWidth: 100, popupHeight: 200)
// show it by call present(_ , animated:) method from a current UIViewController
present(popupVC, animated: true)
【讨论】:
2018-09-04 21:22:03.062970+0300 Project[58459:1907794] *** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“应用程序试图在本身。呈现控制器是以上是关于弹出 UIViewController的主要内容,如果未能解决你的问题,请参考以下文章