2017-02-24 49 views
0

我有一个应用程序,它是这样的:斯威夫特3,通过发送变量3屏幕

第一屏装载一个集合视图,所显示的物品都保存在一个CSV文件中。

你点击其中一个项目,它会加载一个新的屏幕,并从该项目的csv的细节。

我有一个csv解析工具,它可以根据csv文件中该行的id拉取正确的信息。

我的问题:在第二个屏幕后,我有第三个屏幕,它有一个Google Map视图,其中一个项目在csv文件中是lat和另一个lon。

我想通过基于ID的第三个屏幕经纬度和经度值,所以正确的值经过。

我对Swift非常陌生,我无法理解这一点。

1)我是否需要在第二个屏幕上再次解析CSV文件?

2)我是否准备Segue方法发送已解析的CSV文件中的详细信息?如果是有人可以帮助我的代码赛格瑞的准备请

编辑以incude代码:

第一个VC对Segue公司

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "TrackDetailVC" { 
     if let detailsVC = segue.destination as? TrackDetailVC { 
      if let tr = sender as? Tracks { 
       detailsVC.track = tr 
      } 
     } 
    } 

第一个VC CSV解析代码准备

func parseTrackCSV() { 

    let path = Bundle.main.path(forResource: "tracks", ofType: "csv")! 

    do { 
     let csv = try CSV(contentsOfURL: path) 
     let rows = csv.rows 

     for row in rows { 
      let trackId = Int(row["id"]!)! 
      let name = row["name"]! 
      let postcode = row["postcode"]! 
      let trackType = row["type"]! 
      let locID = row["locID"]! 
      let lon = Double(row["long"]!)! 
      let lat = Double(row["lat"]!)! 
      let tr = Tracks(name: name, trackId: trackId, postcode: postcode, trackType: trackType, locId: locID, lon: lon, lat: lat) 

      track.append(tr) 

      } 
     } catch let err as NSError { 
     print(err.debugDescription) 

    } 

} 

所以使用这个我将如何在第二个VC上编写准备Segue代码以传递给第三个?

非常感谢

+0

你用代表尝试传递数据吗? –

+0

通过标准'prepare(for:,sender:)'segue方法将'latitude'和'longitude'传递到您的“第二个屏幕”,然后将'latitude'和'longitude'通过下一个segue传递给您的“第三屏“。如果您需要的不仅仅是一般性建议,还需要发布代码,说明您遇到的具体问题。 –

+0

嗨,编辑包含来自第一个VC的代码,以显示它如何将数据从第一个屏幕带到第二个屏幕。我知道我需要通过相同的数据,但我无法在自己的头脑中找出如何。我最终需要纬度,经度和名字通过 –

回答

1

重新分析CVC效率不高。

您将需要第三个视图控制器中的变量。如果它是代表或LatLng数据,则由您决定。

1在第三个视图控制器中为LatLng声明一个可选项,并将其设置为为segue做好准备。

2使用函数“getLatLng”创建一个协议“GoogleMapDelegate”并让视图控制器两个实现它。在视图控制器3中为代理制作一个可选变量。然后在准备继续时通过“自我”(视图控制器二)。最后,当你需要:调用你的Delegate.getLatLng()