选择 Swift 时将注释标题传递给嵌入式容器视图

Posted

技术标签:

【中文标题】选择 Swift 时将注释标题传递给嵌入式容器视图【英文标题】:Pass annotation title to embedded containerview when selected Swift 【发布时间】:2019-05-29 07:47:15 【问题描述】:

我尝试使用 func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) 将注释标题传递给嵌入式容器视图。但是,当我构建并运行时,它不起作用。

我做错了什么?这是正确的方法吗?

我试过 func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) 查看代码

var annotationTitle = "Default"



func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView)
    if let annotation = view.annotation 
        annotationTitle = annotation.title!!
    




override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
    if segue.identifier == "showMapContainer" 
        let destination = segue.destination as! MapDetailContainerViewController
        destination.selectedAnnotation = annotationTitle as String
    

数据作为“Deafult”而不是 annotation.title 值传递给 containerviewcontroller

【问题讨论】:

感谢您的洞察力。容器和地图同时显示。我希望能够单击各种地图图钉并让容器显示有关当前选择的图钉的信息。 【参考方案1】:

你说:

容器和地图同时显示。

如果它们同时被创建,那么prepare(for:sender:) 无疑会在didSelect 之前被调用。您可以通过一些断点或明智的print 语句来确认这一点。

所以你可以让prepare(for:sender:) 在某个局部变量中保存对segue.destination as? MapDetailContainerViewController 的引用,然后didSelect 可以设置selectedAnnotation

var embeddedViewController: MapDetailContainerViewController?

override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
    if segue.identifier == "showMapContainer" 
        embeddedViewController = segue.destination as? MapDetailContainerViewController
    


func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) 
    if let annotation = view.annotation,
        let title = annotation.title 
            embeddedViewController?.selectedAnnotation = title
    

或者您可以绕过prepare(for:sender),直接使用children(以前称为childViewControllers):

func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView)
    if let embeddedViewController = children.first as? MapDetailContainerViewController,
        let annotation = view.annotation,
        let title = annotation.title 
            embeddedViewController.selectedAnnotation = title
    

【讨论】:

以上是关于选择 Swift 时将注释标题传递给嵌入式容器视图的主要内容,如果未能解决你的问题,请参考以下文章

在 uicollectionview 上录制时将图像快速传递给详细视图控制器

执行 segue 时将字符串传递给第二个视图控制器的 UILabel

关闭时将值传递给视图控制器时出错 |斯威夫特 5

如何从视图控制器发送数据以在 swift 5 中嵌入视图控制器?

由于嵌入式表格视图,Swift 无法使用 hidesBarsOnSwipe

嵌入在容器中的 Swift 表格视图