将注释标题传递给View Controller(swift)

时间:2015-09-05 17:41:11

标签: swift annotations segue title

我很难将选定注释的标题传递给受控制的视图控制器。我觉得这可能是一件简单的事情,我需要改变,但无法弄明白。

以下是准备segue的代码:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if(segue.identifier == "viewDetail"){

        let theDestination : DetailViewController = segue.destinationViewController as! DetailViewController
        theDestination.getName = view.annotation.title!
    }
}

这里是用于点击注释调出时的代码,它执行segue

   func mapView(mapView: MKMapView!, annotationView view: MKAnnotationView!, calloutAccessoryControlTapped control: UIControl!) {
    self.performSegueWithIdentifier("viewDetail", sender: self)

}

问题是,在prepareForSegue函数中..它无法识别“view.annotation.title!”声明UIView没有成员“注释”。

我知道当我在其他函数中println(view.annotation.title!)时,它可以正常工作

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

您需要在地图视图委托方法的view sender参数中传递performSegueWithIdentifier

func mapView(mapView: MKMapView!, annotationView view: MKAnnotationView!, calloutAccessoryControlTapped control: UIControl!) {
    self.performSegueWithIdentifier("viewDetail", sender: view)
}

之后,您可以在sender的实施中的prepareForSegue参数中阅读。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if(segue.identifier == "viewDetail"){
        let theDestination : DetailViewController = segue.destinationViewController as! DetailViewController
        theDestination.getName = (sender as! MKAnnotationView).annotation!.title!
    }
}

答案 1 :(得分:0)

感谢您的帮助,我用简单的方法解决了这个问题:

annotation = self.map.selectedAnnotations[0] as! MKAnnotation

这样它就会在视图中发送第一个选定注释的注释标题,这个标题只有一个...我调用的那个。