gpt4 book ai didi

ios - Swift - iOS 8 中的 UIPopoverController

转载 作者:搜寻专家 更新时间:2023-10-30 23:02:32 26 4
gpt4 key购买 nike

我正在尝试将一个简单的 popoverController 添加到我的 iPhone 应用程序,而我目前正在努力解决经典的“空白屏幕”,当我点击按钮时它会覆盖所有内容。

我的代码是这样的:

@IBAction func sendTapped(sender: UIBarButtonItem) {


var popView = PopViewController(nibName: "PopView", bundle: nil)

var popController = UIPopoverController(contentViewController: popView)

popController.popoverContentSize = CGSize(width: 3, height: 3)

popController.presentPopoverFromBarButtonItem(sendTappedOutl, permittedArrowDirections: UIPopoverArrowDirection.Up, animated: true)

func adaptivePresentationStyleForPresentationController(controller: UIPresentationController!) -> UIModalPresentationStyle {
// Return no adaptive presentation style, use default presentation behaviour
return .None
}

}

adaptivePresentationStyleForPresentationController 函数只是我添加的内容,因为我在某处读到这是在 iphone 上获得此函数所需实现的内容。但是仍然:仍然有一个空白图像覆盖整个屏幕,我不知道如何修复它。

如有任何建议,我们将不胜感激。

最佳答案

我为此实现的解决方案基于 2014 年 WWDC session 中提供的示例 View Controller Advancements in iOS 8 (参见 slide notes)。请注意,您必须将 adaptivePresentationStyleForPresentationController 函数作为 UIPopoverPresentationControllerDelegate 的一部分来实现,但该函数应该在您的 sendTapped 函数之外主视图 Controller ,并且您必须在该文件的类声明行中指定 UIPopoverPresentationControllerDelegate 以确保您的代码修改该行为。我还冒昧地将在弹出窗口中呈现 View Controller 的逻辑分离到它自己的函数中,并添加了一个检查以确保该函数不会呈现请求 View Controller (如果它已经在当前上下文中呈现)。

因此,您的解决方案可能如下所示:

// ViewController must implement UIPopoverPresentationControllerDelegate
class TheViewController: UIViewController, UIPopoverPresentationControllerDelegate {
// ...
// The contents of TheViewController class
// ...

@IBAction func sendTapped(sender: UIBarButtonItem) {
let popView = PopViewController(nibName: "PopView", bundle: nil)
self.presentViewControllerAsPopover(popView, barButtonItem: sender)
}

func presentViewControllerAsPopover(viewController: UIViewController, barButtonItem: UIBarButtonItem) {
if let presentedVC = self.presentedViewController {
if presentedVC.nibName == viewController.nibName {
// The view is already being presented
return
}
}
// Specify presentation style first (makes the popoverPresentationController property available)
viewController.modalPresentationStyle = .Popover
let viewPresentationController = viewController.popoverPresentationController?
if let presentationController = viewPresentationController {
presentationController.delegate = self
presentationController.barButtonItem = barButtonItem
presentationController.permittedArrowDirections = .Up
}
viewController.preferredContentSize = CGSize(width: 30, height: 30)

self.presentViewController(viewController, animated: true, completion: nil)
}

func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle {
return .None
}
}

现实世界的实现

我在我托管在 Github 上的一个正在进行的应用程序中实现了这种用于注册表单输入验证的方法。我在 UIViewController+Extensions.swift 中将其实现为 UIVIewController 的扩展.您可以在 AuthViewController.swift 中的验证函数中看到它的使用情况| . presentAlertPopover method获取一个字符串并使用它来设置我设置的 GenericAlertViewController 中 UILabel 的值(使动态文本弹出窗口变得容易)。但实际的弹出窗口魔术都发生在 presentViewControllerAsPopover method 中。 ,它有两个参数:要显示的 UIViewController 实例,以及用作显示弹出窗口的 anchor 的 UIView 对象。箭头方向被硬编码为 UIPopoverArrowDirection.Up,但这并不难更改。

关于ios - Swift - iOS 8 中的 UIPopoverController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27670160/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com