我想将数据从MapViewController
中的选定注释传递到我的DetailsViewController
。
我正试图用下面的代码保留所选注释的数据。我还添加了一个为segue做准备的方法。
我正在从Firebase检索数据,因此每个注释都有不同的标题和描述。
titleLabel
和descriptionLabel
不会在DetailsViewController上显示文本。
我是编程新手,任何帮助都将不胜感激!如果我需要提供任何其他信息,请告诉我。
func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
var selectedAnnotation = view.annotation
func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if (segue.identifier == "goToDetails") {
let detailsVC = segue.destination as! DetailsViewController
detailsVC.TitleLabel.text = selectedAnnotation?.title as! String
detailsVC.DescriptionLabel.text = selectedAnnotation?.subtitle as! String
}
}
self.performSegue(withIdentifier: "goToDetails", sender: nil)
}
-
在DetailsViewController中创建两个字符串变量。
var detailTitle = "" var detailDescription = ""
-
在你的第一个控制器中这样做:
var selectedTitle = "" var selectedDescription = "" func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "goToDetails" { let detailsVC = segue.destination as! DetailsViewController detailsVC.detailTitle = selectedTitle detailsVC.detailDescription = selectedDescription } } func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) { if let selectedAnnotation = view.annotation { if let title = selectedAnnotation.title { self.selectedTitle = title } if subtitle = selectedAnnotation.subtitle { self.selectedDescription = subtitle } } self.performSegue(withIdentifier: "goToDetails", sender: nil) }
-
问题是,您试图在不创建标签的情况下设置文本。在你的第二个视图控制器(DetailsViewController(中这样做,这样标签就会被创建,你可以给它们你的文本
override func viewDidLoad() { super.viewDidLoad() self.titleLabel.text = detailTitle self.descriptionLabel.text = detailDescription }