Ios 点击MKAnnotationView时显示UIMenuController

Ios 点击MKAnnotationView时显示UIMenuController,ios,swift,Ios,Swift,这就是我在代码中所做的: func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) { print("selectedview") let controller = UIMenuController.shared let item = UIMenuItem(title: "Usun", action: #selector(deletePointer)) controller.menu

这就是我在代码中所做的:

func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
    print("selectedview")

    let controller = UIMenuController.shared
    let item = UIMenuItem(title: "Usun", action: #selector(deletePointer))
    controller.menuItems = [item]
    controller.setTargetRect(mapView.frame, in: mapView)
    controller.setMenuVisible(true, animated: true)
}

@objc func deletePointer() {
    print("deleted")
}
但菜单并没有出现。方法被调用,因为已打印
selectedView


您的ViewController必须能够成为第一响应者:

override func canBecomeFirstResponder() -> Bool {
    return true
}
然后像这样设置目标rect(其中
view
是注释视图):


对不起,我的代码是Swift 2代码…:)

对于Swift 5.0,它应该是:

extension  mapViewController
{

// Your View Controller
override var canBecomeFirstResponder: Bool
{
    return true
}


func mapView(_ mapView: MKMapView, didSelect annoView: MKAnnotationView )
{
    let controller = UIMenuController.shared
    let item = UIMenuItem(title: "Menu Test1", action: #selector(menuTestFunc))
    controller.menuItems = [item]

    if #available(iOS 13.0, *)
    {
        UIMenuController.shared.showMenu( from: self.view, rect: annoView.frame )
    }
    else
    {
        UIMenuController.shared.setTargetRect( annoView.frame, in: self.view )
        UIMenuController.shared.setMenuVisible( true, animated: true )
    }
}


@objc func menuTestFunc()
{
    print( "menuTestFunc() called" )
}

} //    mapViewController extensions
extension  mapViewController
{

// Your View Controller
override var canBecomeFirstResponder: Bool
{
    return true
}


func mapView(_ mapView: MKMapView, didSelect annoView: MKAnnotationView )
{
    let controller = UIMenuController.shared
    let item = UIMenuItem(title: "Menu Test1", action: #selector(menuTestFunc))
    controller.menuItems = [item]

    if #available(iOS 13.0, *)
    {
        UIMenuController.shared.showMenu( from: self.view, rect: annoView.frame )
    }
    else
    {
        UIMenuController.shared.setTargetRect( annoView.frame, in: self.view )
        UIMenuController.shared.setMenuVisible( true, animated: true )
    }
}


@objc func menuTestFunc()
{
    print( "menuTestFunc() called" )
}

} //    mapViewController extensions