我如何在 iphone 应用程序中实现这个弹出菜单,就像 ipad 中的弹出窗口一样?
编辑:这是目前最好的:https ://github.com/runway20/PopoverView
从 iOS 8 开始,UIPopoverPresentationController
除了 iPad 之外,您还可以用于 iPhone。
UIBarButtonItem
到你的主视图控制器。UILabel
. 如果你想要一个完整的菜单,那么只需添加一个表格视图或按钮列表。show
,选择Present as Popover
。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
}
}
如果您想将弹出框设置为出现在条形按钮项目之外的某个位置(UIButton
例如在 a 上),那么您需要设置sourceView
and sourceRect
。有关详细信息,请参阅此答案。
上面的例子主要来自第一个链接。
看看 iPhone UIPopoverController 的实现:WEPopover
在 iPhone 上,您通常会使用 UIActionSheet 来处理这样的一堆按钮。它从底部向上滑动,而不是在按钮旁边弹出,但这是 iPhone 上的标准行为。
有一个甚至比 WEPopover 更好。由一家名为 50pixels 的公司开发,名为FPPopover。
您可以在https://github.com/50pixels/FPPopover下载 FPPopover
您必须使用自定义背景图像或透明绘图手动实例化 UIView,在顶部添加一些 UIButton(或其他类型的自定义视图),并以某种方式处理该视图之外的所有触摸。
请注意,这是非标准 UI。操作表将更符合 HIG。
要从作为 tableview 控制器一部分的导航控制器上的右侧栏按钮项获取弹出框,以下内容适用于Swift 4和 Xcode 9。
修改“as!FilterVC”以使用弹出视图控制器的标题。
/// 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
}
您可以查看 WYPopoverController:https ://github.com/sammcewan/WYPopoverController
上面的截图不是 UIActionSheet。它看起来像一个简单的 UIView 子类,上面有自定义 UIButtons。因此,请继续根据您的需要创建子类,然后在每次需要时将其作为子视图添加到您的视图中。