繁体   English   中英

如何识别Swift中是否已按下MKPointAnnotation?

[英]How to identify if MKPointAnnotation has been pressed in Swift?

使用for loop我使用在名为CustomPointAnnotation的类中创建的标记在每个注释中存储了唯一的URL。 我正在尝试打印出已按下的注释的URL。 问题是我单击注释时Xcode的输出控制台不打印任何内容。

我尝试遵循此指南: 如何确定何时按下注释

我复制了所有代码,但未检测到是否单击了注释。

我如何知道是否单击了注释?

这是CustomPointAnnotation。

class CustomPointAnnotation: MKPointAnnotation {
        var tag: String!
    }

我声明了变量标签,以便为每个注释存储一个唯一的变量。

我的ViewController类:

在ViewController类中,有一个循环遍历我的Firebase数据库JSON文件:

func displayCordinates() {
    ref = Database.database().reference()
    let storageRef = ref.child("waterfountains")

    storageRef.observeSingleEvent(of: .value, with: { snapshot in
        for child in snapshot.children.allObjects as! [DataSnapshot] {
            let annotation = CustomPointAnnotation()
            let dict = child.value as? [String : AnyObject] ?? [:]
            annotation.title = "Water Fountain"
            annotation.tag = dict["url"] as? String
            annotation.coordinate = CLLocationCoordinate2D(latitude: dict["lat"] as! Double, longitude: dict["long"] as! Double)
            self.mapView.addAnnotation(annotation)
            }
    })
}

通过调用viewDidLoad的函数来显示注释:

override func viewDidLoad() {
    super.viewDidLoad()

    displayCordinates()
}

应该检测是否已单击注释的函数:

func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
    if let annotation = view.annotation as? CustomPointAnnotation {
        print(annotation.tag!)
    }  
}

感谢您的帮助。

mapView:didSelect:MKMapViewDelegate方法。 如果您未在ViewController上设置mapView.delegate = self ,则此函数将永远不会触发。

通常,它将在ViewDidLoad设置。 在对mapView执行任何其他操作之前。 更改您的ViewDidLoad看起来像

override func viewDidLoad() {
    super.viewDidLoad()

    self.mapView.delegate = self
    displayCordinates()
}

应该解决您的问题。 有关整个Apple框架上的protocol / delegate设计模式的更多信息,建议使用Swift编程指南中的 这篇快速文章

更具体地讲你的情况下,检查了所有其他功能/控制,你可以用你的实现带来MKMapViewViewController通过结帐离开苹果文档上MKMapViewDelegate 这将涉及监视地图何时完成加载,何时失败,何时更新用户位置以及可能需要增加应用程序功能并提供出色用户体验的更多事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM