Xcode Swift-设置可见菜单控制器
我试图显示UimenuController,但无法查看它。我该怎么办Xcode Swift-设置可见菜单控制器,xcode,swift,Xcode,Swift,我试图显示UimenuController,但无法查看它。我该怎么办 let MenuController: UIMenuController = UIMenuController.sharedMenuController() MenuController.menuVisible = true MenuController.arrowDirection = UIMenuControllerArrowDirection.Down MenuController.setTargetRect(CG
let MenuController: UIMenuController = UIMenuController.sharedMenuController()
MenuController.menuVisible = true
MenuController.arrowDirection = UIMenuControllerArrowDirection.Down
MenuController.setTargetRect(CGRectMake(100, 80, 50, 50), inView: self.view)
let MenuItem_1: UIMenuItem = UIMenuItem(title: "Menu", action: "delete:")
let MenuItems: NSArray = [delete]
MenuController.menuItems = MenuItems
要真正显示菜单,您需要执行以下操作:
func someFunc() {
becomeFirstResponder()
var menu = UIMenuController.sharedMenuController()
var deleteItem = UIMenuItem(title: "Delete me", action: Selector("deleteLine"))
menu.menuItems = [deleteItem]
menu.setTargetRect(CGRectMake(100, 80, 50, 50), inView: self)
menu.setMenuVisible(true, animated: true)
}
func deleteLine() {
//Do something here
}
override func canBecomeFirstResponder() -> Bool {
return true
}
override func canPerformAction(action: Selector, withSender sender: AnyObject?) -> Bool {
// You need to only return true for the actions you want, otherwise you get the whole range of
// iOS actions. You can see this by just removing the if statement here.
if action == Selector("deleteLine") {
return true
}
return false
}
Swift 3版本代码:
func someFunc() {
becomeFirstResponder()
var menu = UIMenuController.shared
var deleteItem = UIMenuItem(title: "Delete me", action: #selector(ViewController.deleteLine))
menu.menuItems = [deleteItem]
menu.setTargetRect(CGRect(x: 0.0, y: 0.0, width: 20, height: 20), in: self)
menu.setMenuVisible(true, animated: true)
}
func deleteLine() {
//Do something here
}
override var canBecomeFirstResponder: Bool {
return true
}
override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
// You need to only return true for the actions you want, otherwise you get the whole range of
// iOS actions. You can see this by just removing the if statement here.
if action == #selector(ViewController.deleteLine) {
return true
}
return false
}
更重要的一点是应该实现UIMenuItem的操作 你需要调用方法setMenuVisible:(BOOL)menuVisible animated:(BOOL)uiMenuController上的animated我不知道,请举一个例子非常感谢,如果我想在longpress点上方显示菜单,首先设置一个长按处理程序,然后你可以从longpress函数调用someFunc。长按功能有两种状态,您将关注UIGestureRecognitizerState.Begind和UIGestureRecognitizerState.End请接受这一正确答案。它工作得很好。谢谢:)@MassimoNegro您应该将此设置为已接受的答案。您不必打电话成为第一响应者someFunc@BhadreshKathiriya请尝试将“in:self”替换为您想要的对象。菜单将弹出“in:ui视图”