从iOS 8开始,除了iPad外,您还可以为iPhone使用UIPopoverPresentationController
。
UIBarButtonItem
。UILabel
。如果您想要一个完整的菜单,则只需添加表格视图或按钮列表即可。Present as Popover
而不是show
。popoverSegue
(或您在代码中称其为的任何字符串)。这是具有条形按钮项的主视图控制器的代码。
class ViewController: UIViewController, UIPopoverPresentationControllerDelegate {
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "popoverSegue" {
let popoverViewController = segue.destinationViewController
popoverViewController.modalPresentationStyle = UIModalPresentationStyle.Popover
popoverViewController.popoverPresentationController!.delegate = self
}
}
// MARK: - UIPopoverPresentationControllerDelegate method
func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle {
// Force popover style
return UIModalPresentationStyle.None
}
}
如果想要将气泡视图弹出到除了一个bar button item(例如在UIButton
上)之外的其他位置,则需要设置sourceView
和sourceRect
。详情请参见这个答案。
以上示例主要来自第一个链接。
请查看iPhone UIPopoverController的实现:WEPopover
在 iPhone 上,通常会使用 UIActionSheet 来显示这种按钮堆栈。它会从底部滑出,而不是弹出到按钮旁边,但这是 iPhone 上的标准行为。
有一种比WEPopover更好的选择。由一个名为50pixels的公司开发,它被称为FPPopover。
你可以在https://github.com/50pixels/FPPopover下载FPPopover。
UIBarButtonItems
一起使用。 - MattModify "as! FilterVC" to use the title of the your popover view controller.
/// Shows a filter popover view
@IBAction func filterBtnPressed(_ sender: UIBarButtonItem) {
let popover = storyboard?.instantiateViewController(withIdentifier: FILTER_VC) as! FilterVC
popover.modalPresentationStyle = UIModalPresentationStyle.popover
popover.popoverPresentationController?.backgroundColor = UIColor.green
popover.popoverPresentationController?.delegate = self
popover.popoverPresentationController?.backgroundColor = ColorPalette.Blue.Medium
popover.popoverPresentationController?.sourceView = self.view
popover.popoverPresentationController?.sourceRect = CGRect(x: self.view!.bounds.width, y: 0, width: 0, height: 0)
popover.popoverPresentationController?.permittedArrowDirections = .up
self.present(popover, animated: true)
} }
func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle {
return UIModalPresentationStyle.none
}