我想通过像这样的图片的按钮制作一个弹出窗口:
为此,我按照以下步骤操作:
1.我创建了一个 View Controller (加上一个 Controller )并将其大小更改为100*200
2.我从第一个 Controller (JobsViewController
)到上面的 Controller 作为呈现为弹出框
,并设置一个标识符:
3.在JobsViewController
中:
func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "showFeatureJobs" {
//let popoverViewController = segue.destination
// popoverViewController.modalPresentationStyle = UIModalPresentationStyle.popover
// popoverViewController.popoverPresentationController!.delegate = self
// get a reference to the view controller for the popover
let popController = UIStoryboard(name: "JobsViewController", bundle: nil).instantiateViewController(withIdentifier: "showFeatureJobs")
// 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 as! UIView? // button
popController.popoverPresentationController?.sourceRect = (sender?.bounds)!
// present the popover
self.present(popController, animated: true, completion: nil)
}
}
// MARK: - UIPopoverPresentationControllerDelegate method
func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle {
// Force popover style
return UIModalPresentationStyle.none
}
4.但是当我单击按钮时,我的弹出窗口覆盖了我的所有页面:
我的问题出在哪里?
最佳答案
弹出窗口 Controller 应该已经由 Storyboard序列实例化。您需要使用已有的(且大小合适)而不是创建一个新的。
类似于:
if let popOver = segue?.destination.popoverPresentationController,
{ popOver.sourceRect = yourAnchor.bounds }
我不确定你是如何获得 AnyObject 类型的 sender 参数的?有一个 .bounds 属性用作 sourceRect,因此我必须假设您在实际运行的代码中的其他位置获得了一些适合动态 anchor 位置的坐标。
关于ios - 来自任意 anchor 的弹出窗口 - Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42547396/