我知道如何在this answer(适用于iPhone和iPad)中描述的条形按钮项目中显示弹出窗口。
我想为任意锚点添加一个弹出窗口。我看到的其他SO答案是针对条形按钮项目或在Objective-C中。
我刚学会了如何做到这一点,所以我在下面添加自己的答案。
答案 0 :(得分:25)
更新了Swift 3
在故事板中,添加您想要成为弹出窗口的视图控制器。将故事板ID设置为" popoverId"。
还可以向主视图控制器添加一个按钮,并将IBAction连接到以下代码。
import UIKit
class ViewController: UIViewController, UIPopoverPresentationControllerDelegate {
@IBAction func buttonTap(sender: UIButton) {
// get a reference to the view controller for the popover
let popController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "popoverId")
// set the presentation style
popController.modalPresentationStyle = UIModalPresentationStyle.popover
// set up the popover presentation controller
popController.popoverPresentationController?.permittedArrowDirections = UIPopoverArrowDirection.up
popController.popoverPresentationController?.delegate = self
popController.popoverPresentationController?.sourceView = sender // button
popController.popoverPresentationController?.sourceRect = sender.bounds
// present the popover
self.present(popController, animated: true, completion: nil)
}
// UIPopoverPresentationControllerDelegate method
func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle {
// Force popover style
return UIModalPresentationStyle.none
}
}
设置sourceView
和sourceRect
是允许您选择显示弹出窗口的任意点的原因。
那就是它。现在,当按下按钮时,它应该是这样的。
感谢this article寻求帮助。
答案 1 :(得分:9)
Swift 3.1的解决方案:
添加到您的ViewController UIPopoverPresentationControllerDelegate 委托:
let controller = MyPopViewController()
controller.modalPresentationStyle = UIModalPresentationStyle.popover
let popController = controller.popoverPresentationController
popController?.permittedArrowDirections = .any
popController?.delegate = self
popController?.sourceRect = (self.myButton?.bounds)!
popController?.sourceView = self.myButton
self.present(controller, animated: true, completion: nil)
向ViewController添加一个按钮,点击按钮,调用以下代码:
<tr th:each="String: ${navbarElements}">
答案 2 :(得分:1)
更新为上面的func语法:
func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentatinStyle {
return .none
}
出于某种原因,旧语法仍然被允许但不处于活动状态,并且将无法正确实现弹出窗口或锚定。