从 UIBarButtonItem 显示 UIMenuController
Show UIMenuController from UIBarButtonItem
我有一个导航栏,右侧有一个栏按钮项。我想在按下该按钮时打开一个弹出菜单。
谁能告诉我为什么这不起作用:
@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)
}
我认为您的 targetRect
未按预期运行。我假设您的 objective 是从 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
}
我有一个导航栏,右侧有一个栏按钮项。我想在按下该按钮时打开一个弹出菜单。
谁能告诉我为什么这不起作用:
@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)
}
我认为您的 targetRect
未按预期运行。我假设您的 objective 是从 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
}