热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

didSelectforMKAnnotationView没有开火

如何解决《didSelectforMKAnnotationView没有开火》经验,为你挑选了1个好方法。

我有麻烦在MapView上选择自定义注释.我尝试了几种方法,没有成功:

使用MKMapViewDelegate的didSelect

使用添加到AnnotationView的UIButton

对ImageView使用UITapGestureRecognizer,它应该用于注释

您可以在下面的代码中找到所有这些方法:

override func viewDidLoad() {
    super.viewDidLoad()
    // some more initialization code

    for item in items {
        let annotation = IdentifiedMKPointAnnotation() // has only one additional property named "id"

        annotation.coordinate = CLLocationCoordinate2D(latitude: item.spots[0].latitude!, longitude: item.spots[0].longitude!)
        annotation.id = i

        self.mapView.addAnnotation(annotation)

        i += 1
    }
}


// MARK: - MapViewDelegate
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
    let item = self.items[(annotation as! IdentifiedMKPointAnnotation).id!]

    let annotatiOnView= MKAnnotationView(annotation: annotation, reuseIdentifier: "")
    //annotationView.canShowCallout = false
    //annotationView.isEnabled = false

    let imageView = UIImageView()
    imageView.frame.size = CGSize(width: 40, height: 40)
    imageView.layer.cornerRadius = 20
    imageView.layer.masksToBounds = true
    imageView.af_setImage(withURL: URL(string: item.images.count > 0 ? item.images[0] : item.image!)!)
    imageView.cOntentMode= .scaleAspectFill

    //let gr = UIGestureRecognizer(target: self, action: #selector(annotationSelected(_:)))
    //imageView.addGestureRecognizer(gr)
    //imageView.isUserInteractiOnEnabled= true

    //let button = UIButton()
    //button.frame.size = CGSize(width: 40, height: 40)
    //button.setImage(#imageLiteral(resourceName: "play_arrow"), for: .normal)
    //button.addTarget(self, action: #selector(annotationSelected(_:)), for: .touchUpInside)

    annotationView.addSubview(imageView)
    //annotationView.addSubview(button)

    return annotationView
}

func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
    performSegue(withIdentifier: "showDetail", sender: self.items[(view.annotation as! IdentifiedMKPointAnnotation).id!])

    view.setSelected(false, animated: false)
}

func annotationSelected(_ sender: UIImageView) {
    performSegue(withIdentifier: "showDetail", sender: self.items[((sender.superview as! MKAnnotationView).annotation as! IdentifiedMKPointAnnotation).id!])
}

任何想法,为什么行动不是/没有解雇?



1> Kosuke Ogawa..:

如果注释title为空,didSelect则不调用委托.请尝试以下代码.

let annotation = IdentifiedMKPointAnnotation()
annotation.title = "title"


推荐阅读
author-avatar
白杨树问天
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有