iPhone弹出菜单,例如iPad popover?
-
16-10-2019 - |
题
解决方案
看看iPhone UipopoverController实现: Wepopover
其他提示
iOS 8及以后
从iOS 8开始,您可以使用 UIPopoverPresentationController
除iPad外,还可以使用iPhone。
设置
- 添加一个
UIBarButtonItem
到您的主视图控制器。 - 将另一个视图控制器添加到故事板中。将其更改为您希望弹出的大小,并添加您想要的内容。在我的示例中,我刚刚添加了
UILabel
. 。如果您想要整个菜单,请添加表视图或按钮列表。 - 将一个从条形按钮项中添加到视图控制器中,您将用作弹出窗口。而不是
show
, , 选择Present as Popover
.
- 在故事板中选择segue,然后将标识符设置为
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
. 。看 这个答案 有关详细信息。
进一步阅读
以上示例主要来自第一个链接。
在iPhone上,您通常会使用uiactionsheet进行类似的按钮。它从底部滑动,而不是在按钮旁边弹出,但这是iPhone上的标准行为。
有比Wepopover更好的。由一家名为50pixels的公司开发,称为 fppopover.
您将必须使用自定义背景图像或具有透明度的绘图手动实例化UIVIEW,在顶部添加一些Uibuttons(或其他类型的自定义视图),并以某种方式处理该视图之外的所有触摸。
请注意,这是非标准的UI。 ActionSheet将更加符合HIG。
为了从右侧栏按钮在导航控制器的一部分中获取弹出窗口项目,以下对我有用 Swift 4 和Xcode 9。
- 遵循步骤 冲浪 答案上面(社区编辑。)
- 请勿如上答案所示实现segue。由于某种原因,尽管设置了明确的尺寸,但SEGUE会导致弹出窗口全屏。
- 给您的popover视图控制器一个属性Inspector中的标题
- 在弹出窗口将显示的位置视图控制器中添加以下代码。
- 修改字符串标识符(这里是引用常数。Swift文件)
修改“ 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。因此,请继续根据您的需求创建子类,然后在每次需要时将其添加为视图中的子视图。