coa*_*175 19 objective-c uiviewcontroller popover ios segue
在我的项目中,我在屏幕的右下方有一个按钮,我在故事板上添加了另一个uiviewcontroller,控制 - 拖动到我想要的uiviewcontroller作为弹出窗口,然后将该viewcontroller大小设置为(300,300)并检查'使用首选显式大小'.当我加载应用程序并单击按钮时,整个屏幕将被"弹出窗口"覆盖.我也尝试进入popoverViewController的.m文件并设置大小,但这也不起作用.
有任何想法吗?
编辑:因为它看起来我必须是全屏,这很好但是我仍然遇到了我之前遇到的一些其他问题.我的弹出屏幕会出现,我将背景设为黑色,alpha设为.5使其透视然而它会完成动画,然后一旦动画完成,屏幕将从.5不透明度变为完全黑色而且是唯一的我能看到的是电池图标.
Bha*_*rat 26
OP使用Objective-C.这个答案提供了swift中的代码.将swift转换为Objective-C应该很容易.
在新添加的ViewController中,在"Simulated Metrics"下将"Size"更改为"Freeform",将"Status Bar"更改为"None".
在"模拟大小"下,将视图的高度和宽度更改为您希望弹出窗口内容的实际大小.
为新添加的VC创建一个segue.使用segue类型作为"Present As Popover"并给出segue的名称,例如"popoverSegue".
在要从中触发此segue的ViewConroller中,添加UIPopoverPresentationControllerDelegate
协议.
class ViewController: UIViewController, UIPopoverPresentationControllerDelegate {
}
Run Code Online (Sandbox Code Playgroud)
覆盖prepareForSegue函数以捕获popover segue.将modalPresentationStyle设置为.Popover以显式声明您想要一个弹出框,然后将视图的popoverPresentationController的委托属性分配给self:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "popoverSegue" {
let popoverViewController = segue.destinationViewController as! UIViewController
popoverViewController.modalPresentationStyle = UIModalPresentationStyle.Popover
popoverViewController.popoverPresentationController!.delegate = self
}
}
Run Code Online (Sandbox Code Playgroud)
实现adaptivePresentationStyleForPresentationController函数,告诉你的应用你真的想要那个popover演示文稿并且不接受任何替换:
func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle {
return UIModalPresentationStyle.None
}
Run Code Online (Sandbox Code Playgroud)
在这之后,我可以在iPhone上弹出一个不是全屏但是为ViewController设置的大小的弹出窗口.
资料来源:iPhone风格的iPhone手机版采用Swift
Swift 3版
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == SEGUE_IDENTIFIER {
let popoverViewController = segue.destination as! YourViewController
popoverViewController.modalPresentationStyle = UIModalPresentationStyle.popover
popoverViewController.popoverPresentationController!.delegate = self
}
}
func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle {
return UIModalPresentationStyle.none
}
Run Code Online (Sandbox Code Playgroud)
感谢Bharat的出色答案,我个人使用的UIStoryboardSegue几乎完全相同.这样,我可以在故事板中更改segue的类,拥有我想要的,而不是污染我的ViewControllers:
class AlwaysPopupSegue : UIStoryboardSegue, UIPopoverPresentationControllerDelegate
{
override init(identifier: String?, source: UIViewController, destination: UIViewController)
{
super.init(identifier: identifier, source: source, destination: destination)
destination.modalPresentationStyle = UIModalPresentationStyle.popover
destination.popoverPresentationController!.delegate = self
}
func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle {
return UIModalPresentationStyle.none
}
}
Run Code Online (Sandbox Code Playgroud)
小智 0
在 iPhone 上,您可以创建一个可以管理所有弹出窗口的自定义视图控制器。由于每个视图控制器都有自己的导航控制器,因此您可以将新的视图控制器作为 du 视图添加到 app.window.rootviewcontroller 中,并将所有视图控制器置于前面。
如果您不想自己编写,则可以使用类似的内容,例如: http: //cocoapods.org/pods/FPPopover
归档时间: |
|
查看次数: |
15042 次 |
最近记录: |