[英]popover from an arbitrary anchor point - Swift
我想從像這樣的圖片的按鈕彈出:
為此,我按照以下步驟操作:
1.我創建了一個視圖控制器(加上一個控制器),並將其尺寸更改為100 * 200
2.我從第一個控制器( JobsViewController
)到上方的控制器( present as popover
JobsViewController
)進行了搜索,並設置了一個標識符:
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.但是當我點擊我的按鈕時,我的彈出窗口會覆蓋我的所有頁面:
我的問題在哪里?
情節提要序列應該已實例化popover控制器。 您需要使用一個已經存在(並且大小合適)的容器,而不是創建一個新的容器。
就像是 :
if let popOver = segue?.destination.popoverPresentationController,
{ popOver.sourceRect = yourAnchor.bounds }
我不確定您如何獲得AnyObject類型的sender參數? 具有.bounds屬性用作sourceRect,因此我必須假定您在實際運行代碼中的其他位置為動態錨點位置獲取了一些適當的坐標。
我也遇到同樣的情況。 它不是被稱為適當的代表。 您應該使用諸如swift(3.0,4.0)之類的適當語言調用委托函數。 希望對您有幫助
func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle {
return .none
}
在您的prepareForSegue函數中,您可以將AnyObject的發件人更改為UIBarButtonItem,然后在顯示彈出框之前放入代碼行
if let popoverController = popController.popoverPresentationController {
popoverController.barButtonItem = sender
}
如果您仍想使用Anyobject,則必須將其強制轉換為UIBarButtonItem
if let popoverController = popController.popoverPresentationController {
popoverController.barButtonItem = sender as? UIBarButtonItem
}
我希望這對你有用
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.