当点击rightCalloutAccessoryView的DetailDisclosure按钮时,我试图将所选MKAnnotation的坐标,标题和副标题从ViewController1(VC1)传递到ViewController2(VC2)。我有一个从VC1到VC2的segue,标识符为viaSegue。我在VC2中有一个带标识符viaSegueLabel的标签,我想将坐标显示为String。
自定义MKAnnotation调用的函数,以便在rightCalloutAccessoryView中显示DetailDisclosure按钮,如下所示:
// Customize Annotation Callout
func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? {
// 1
let identifier = "Capital"
// 2
if annotation.isKindOfClass(Capital.self) {
// 3
var annotationView = mapView.dequeueReusableAnnotationViewWithIdentifier(identifier)
if annotationView == nil {
//4
annotationView = MKPinAnnotationView(annotation:annotation, reuseIdentifier:identifier)
annotationView!.canShowCallout = true
// 5
let btn = UIButton(type: .DetailDisclosure)
annotationView!.rightCalloutAccessoryView = btn
} else {
// 6
annotationView!.annotation = annotation
}
return annotationView
}
// 7
return nil
}
点击DetailDisclosure按钮时,用户从VC1到VC2的功能如下所示:
// When righCalloutAccessoryView is tapped, segue to newView
func mapView(mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) {
self.performSegueWithIdentifier("newView", sender: view)
}
我认为我需要实现的功能看起来像:
// Pass data to newView
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
if (segue.identifier == "newView") {
let destViewController:BusStopSettingsViewController = segue.destinationViewController as! BusStopSettingsViewController
destViewController.viaSegue = // not sure how to reference selected Annotation here
}
}
在prepareForSegue()的最后一行,我需要引用当前选中的MKAnnotation。是否有一个内置于Swift中的方法可以让我这样做,还是应该将Annotation设为全局?
答案 0 :(得分:0)
能够解决这个问题,以防将来有人需要实施类似的东西。
self.performSegueWithIdentifier("newView", sender: view)
以编程方式将您的程序通过标识为"newView"
的segue连接到与您当前所在VC连接的View Controller(VC)。在完全分割之前,程序会调用prepareForSegue()
。您可以使用此功能处理向您正在使用的VC发送信息的位置。我的问题是,我不知道我发送的是什么(在类型,变量名称等方面)。如果您发现,prepareForSegue()
和self.performSegueWithIdentifier("newView", sender: view)
都有参数发件人。您使用performSegueWithIdentifier()
发送的内容将传递到prepareForSegue()
,并会在您的destinationViewController
中通过名称为 viaSegue 的变量收到。这不是标准名称,它只是我选择命名该变量的内容,如果您研究上面的代码,您将看到它的使用位置和工作原理。
所以我想发送有关我点击过的MKAnnotation的信息。所以,我需要将一个MKAnnotationView类型的对象发送到我的接收VC“BusStopSettingsViewController”(BSSVC)。在BSSVC中,我需要一个名为“viaSegue”的MKAnnotationView类型的变量。要向BSSVC发送MKAnnotationView类型的对象,我需要这样做
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
if (segue.identifier == "newView") {
// pass data to next view
let destViewController:BusStopSettingsViewController = segue.destinationViewController as! BusStopSettingsViewController
destViewController.viaSegue = sender as! MKAnnotationView
}
}
注意viaSegue
如何被指定为将接收此对象的变量。
希望这有帮助!