【问题标题】:How do I make a MapKit callout button perform a segue?如何使 MapKit 标注按钮执行转场?
【发布时间】:2016-06-01 13:03:26
【问题描述】:

我在 MapKit 中有一个自定义标注视图,其中包含一个按钮。我想这样做,以便点击此按钮将执行给定的转场。我怎么能这样做,因为我从一个 .xib 加载自定义标注,它的类是 UIView 的子类(而不是 UIViewController,所以我不能只在其类文件中执行 segue)

编辑

    if control == view.detailCalloutAccessoryView as? CustomCalloutView {
        if control.viewWithTag(6).touchesBegan {
        performSegueWithIdentifier("showRentalDetailsFromCalloutView", sender: self)
        }
    }

【问题讨论】:

    标签: ios swift mapkit


    【解决方案1】:

    实际上有一种方法可以检测对标注的点击。这是在 Objective-C 中的,但你可以将它转换为 Swift,它会为你工作:

    - (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view
            calloutAccessoryControlTapped:(UIControl *)control
    {
        [self performSegueWithIdentifier:@"SegueName" sender:self];
    }
    

    这里是关于点击 MKAnnotation 的更详细答案的参考:MKMapView MKPointAnnotation tap event

    这是我在 Swift 中对该方法的再现。免责声明:我没有对此进行测试,但它应该为您指明正确的方向。

    func mapView(_ mapView: MKMapView,
        annotationView view: MKAnnotationView,
        calloutAccessoryControlTapped control: UIControl)
    {
    
        performSegueWithIdentifier("SegueName", sender: self)
    
    }
    

    为了完整起见,这里是 MKMapViewDelegate 文档的链接,其中包含此函数的详细信息:MKMapViewDelegate Protocol Reference

    【讨论】:

    • 我确实实现了这个......但我希望让点击特定于我的标注内的按钮,而不是整个标注视图。
    • 您可以向标注/mkannotationview 添加标签或名称,并执行一些逻辑来确定单击了哪个标注。
    • 我尝试编写可以识别控件的逻辑,但没有让它工作。你会实现什么样的逻辑?
    • 我刚刚添加了我尝试运行的代码......它没有工作。此外,calloutAccessoryControl 的基本实现也不起作用。
    • 这实际上取决于您设置了多少注释,它们是动态位置还是固定位置。但是,如果您添加一个像annotationView.tag = 1 这样的标签,那么您可以参考该注释的标签来确定它是哪个注释。另外,请添加整个函数,您在哪里调用您刚刚发布的代码?
    猜你喜欢
    • 1970-01-01
    • 2021-06-16
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    相关资源
    最近更新 更多