答案 0 :(得分:29)
从iOS 8开始,除了iPad之外,您还可以将UIPopoverPresentationController
用于iPhone。
UIBarButtonItem
添加到主View Controller。 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
上),则需要设置sourceView
和sourceRect
。有关详细信息,请参阅this answer。
以上示例主要来自第一个链接。
答案 1 :(得分:21)
查看iPhone UIPopoverController实现:WEPopover
答案 2 :(得分:19)
在iPhone上,您通常会使用UIActionSheet来处理一堆按钮。它从底部向上滑动,而不是在按钮旁边弹出,但这是iPhone上的标准行为。
答案 3 :(得分:7)
有一个比WEPopover更好。由名为50pixels的公司开发,称为 FPPopover 。
下载FPPopover答案 4 :(得分:5)
您必须使用自定义背景图像或透明图形手动实例化UIView,在顶部添加一些UIButtons(或其他类型的自定义视图),并以某种方式处理该视图外的所有触摸。
请注意,这是非标准UI。动作表将更符合HIG。
答案 5 :(得分:1)
您可以查看WYPopoverController:https://github.com/sammcewan/WYPopoverController
答案 6 :(得分:1)
要从作为tableview控制器一部分的导航控制器上的右侧栏按钮项获取弹出窗口,以下内容适用于 Swift 4 和Xcode 9。
修改" as! FilterVC"使用popover视图控制器的标题。
/// 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
}
答案 7 :(得分:0)
上面的屏幕截图不是UIActionSheet。它看起来像一个简单的UIView子类,它上面有自定义UIButtons。因此,请根据您的需要创建子类,然后在每次需要时将其作为子视图添加到视图中。