从 UIBarButtonItem 显示 UIMenuController
Posted
技术标签:
【中文标题】从 UIBarButtonItem 显示 UIMenuController【英文标题】:Show UIMenuController from UIBarButtonItem 【发布时间】:2016-01-22 20:23:15 【问题描述】:我有一个导航栏,右侧有一个栏按钮项。我想在按下该按钮时打开一个弹出菜单。
谁能说出为什么这不起作用:
@IBAction func quickJumpClicked()
let menu = UIMenuController.sharedMenuController()
menu.menuItems =
[UIMenuItem(title: "Test me", action: Selector("deleteLine")),
UIMenuItem(title: "Test me", action: Selector("deleteLine")),
UIMenuItem(title: "Test me", action: Selector("deleteLine"))]
menu.setTargetRect(self.navigationController!.toolbar.subviews[1].frame, inView: self.view.superview!)
becomeFirstResponder()
menu.setMenuVisible(true, animated: true)
【问题讨论】:
你实现了 'canPerformAction' 和 'canBecomeFirstResponder' 方法吗? 仅限:canBecomeFirstResponder。它返回“真”。还需要什么吗? 是的,'canPerformAction' 也必须实现,以便所有菜单项都可见 我应该只返回“true”吗? 【参考方案1】:我认为您的 targetRect
未按预期运行。我假设您的目标是从UIBarButtonItem
中显示一个菜单。
您可以做的一件事是重写您的 IBAction
以包含发件人,然后只需获取发件人的框架 - 在您的情况下,是 UIBarButtonItem
。
看起来像这样:
@IBAction func quickJumpClicked(sender: AnyObject)
let menu = UIMenuController.sharedMenuController()
menu.menuItems =
[UIMenuItem(title: "Test me", action: Selector("deleteLine")),
UIMenuItem(title: "Test me", action: Selector("deleteLine")),
UIMenuItem(title: "Test me", action: Selector("deleteLine"))]
menu.setTargetRect(sender.view!!.frame, inView: self.view)
menu.setMenuVisible(true, animated: true)
becomeFirstResponder()
您可能还缺少两种方法。 canPerformAction(_:withSender:)
在 UI 中启用自定义命令,canBecomeFirstResponder()
允许您的控制器成为第一响应者并接收来自 UIMenuController
的消息。
例如:
override func canPerformAction(action: Selector, withSender sender: AnyObject?) -> Bool
if action == Selector("deleteLine")
return true
return false
override func canBecomeFirstResponder() -> Bool
return true
【讨论】:
效果很好,但菜单覆盖了导航栏。有什么方法可以将项目从上到下方向并将菜单放在项目下方? 我不确定是否可以垂直堆叠项目。要将菜单放置在较低的位置,您可以使用框架并添加一个小的 y 偏移量。您可能要考虑完全使用不同的类。自 ios 8 起,UIAlertController 允许在 iPhone 和 iPad 上使用弹出框。以上是关于从 UIBarButtonItem 显示 UIMenuController的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Swift 中更改 UIBarButtonItem 的 tintColor?
为啥 UIBarButtonItem 显示为禁用? [复制]
UIBarButtonItem 没有出现在 UIToolbar Swift 上