2017-12-18 17 views
1

私は、カスタム注釈ビューでボタンクリックイベントを見つけようとします。お願いします。カスタムアノテーションビューの操作方法ボタンをクリックしないでください。

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

     let overlays = self.mapVW.overlays 
     self.mapVW.removeOverlays(overlays) 

     if view.annotation is MKUserLocation 
     { 
      // Don't proceed with custom callout 
      return 
     } 

     let customeView = view.annotation as! Artwork 
     let viewCustome = Bundle.main.loadNibNamed("mapPopUp", owner: nil, options: nil) 

     let callOutView = viewCustome![0] as! CustomCalloutView 
     callOutView.lblLocationName.text = customeView.title 
     callOutView.lblCategory.text = customeView.category 
     callOutView.lblDistance.text = customeView.distance 

     let button = UIButton(frame: callOutView.lblLocationName.frame) 
     button.addTarget(self, action: #selector(GayGuideViewController.btnRouteView(sender:)), for: .touchUpInside) 
     callOutView.addSubview(button) 

     callOutView.center = CGPoint(x: view.bounds.size.width/5, y: -callOutView.bounds.size.height*0.52) 
     view.addSubview(callOutView) 
     mapVW.setCenter((view.annotation?.coordinate)!, animated: true) 
    } 

ありがとうございます。

+0

'customeView'に' gesture recognizer'を追加しましたか? –

+0

ジェスチャ認識機能を使用していません。 –

+0

私は試してみましたが、@ biloshkurskyi.ssはしませんでした –

答えて

1

私は、カスタムポップアップビューでクリックイベントに対してhitTestメソッドを使用していました。私はその時にヒットポイントを見つけて、通知オブザーバを追加し、自分のアクションイベントを実行しました。

class CAnnotationView: MKAnnotationView 
     { 
      override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? { 
       let hitView = super.hitTest(point, with: event) 
       if (hitView != nil) 
       { 
        self.superview?.bringSubview(toFront: self) 
       } 
       return hitView 
      } 
      override func point(inside point: CGPoint, with event: UIEvent?) -> Bool { 
       let rect = self.bounds 
       var isInside: Bool = rect.contains(point) 
       if(!isInside) 
       { 
        for view in self.subviews 
        { 
         isInside = view.frame.contains(point) 
         if isInside 
         { 
          let dictionary = NSMutableDictionary() 
          dictionary.setValue(self.annotation?.coordinate.latitude, forKey: "lat") 
          dictionary.setValue(self.annotation?.coordinate.longitude, forKey: "long") 

          NotificationCenter.default.post(name: NSNotification.Name(rawValue: "Noti_Coordinate"), object: nil, userInfo: dictionary as? [AnyHashable : Any]) 
          break 
         } 
        } 
       } 
       return isInside 
      } 
     } 


override func viewDidLoad() 
    { 
       NotificationCenter.default.removeObserver(self, name: NSNotification.Name(rawValue: "Noti_Coordinate"), object: nil) 
      NotificationCenter.default.addObserver(self, selector: #selector(notificationForRoute(noti:)), name: NSNotification.Name(rawValue: "Noti_Coordinate"), object: nil) 
    } 
func notificationForRoute(noti : NSNotification) 
    { 
     let dict = noti.userInfo! as NSDictionary 
     let lat = dict.value(forKey: "lat") 
     let long = dict.value(forKey: "long") 

     let coordinate = CLLocationCoordinate2D(latitude: lat as! CLLocationDegrees, longitude: long as! CLLocationDegrees) 

     let overlays = self.mapVW.overlays 
     self.mapVW.removeOverlays(overlays) 

     route(dest: coordinate) 
    } 
関連する問題