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