如何将注释的标题和描述数据传递给另一个ViewController



我想将数据从MapViewController中的选定注释传递到我的DetailsViewController

我正试图用下面的代码保留所选注释的数据。我还添加了一个为segue做准备的方法。

我正在从Firebase检索数据,因此每个注释都有不同的标题和描述。

titleLabeldescriptionLabel不会在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)


}
  1. 在DetailsViewController中创建两个字符串变量。

    var detailTitle = ""
    var detailDescription = ""
    
  2. 在你的第一个控制器中这样做:

    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)
    }
    
  3. 问题是,您试图在不创建标签的情况下设置文本。在你的第二个视图控制器(DetailsViewController(中这样做,这样标签就会被创建,你可以给它们你的文本

    override func viewDidLoad() {
    super.viewDidLoad()
    self.titleLabel.text = detailTitle
    self.descriptionLabel.text = detailDescription
    }
    

最新更新