gpt4 book ai didi

ios - Swift 3 TableView Segue 到多个其他 TableView

转载 作者:行者123 更新时间:2023-11-29 11:45:48 26 4
gpt4 key购买 nike

我正在构建一个 CTA 火车跟踪应用程序。我有一个 TableView,其中填充了每条火车线路,我正在尝试弄清楚如何从单击其中一条火车线路的 TableView 单元格到显示解析的 JSON 数据(目的地站和到达时间)的 TableView那条特定的火车线路。

我想知道最好的方法是什么;最简单的似乎是我会从每个单击的单元格到每条火车线路的完全不同的 TableView,但我不确定这是否有效。否则,似乎我需要以某种方式将信息(例如 JSON 提要地址)从每个单击的单元格传递到目标 TableView。有人有什么建议吗?下面是我的代码:

包含所有火车线路的初始屏幕

import UIKit
import SwiftyJSON

class TableViewController: UITableViewController {

override func viewWillAppear(_ animated: Bool) {
self.tabBarController?.navigationItem.title = "CTA Train Tracker"
}

// MARK: - Table view data source

override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return trains.count
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "subtitle", for: indexPath)
let train = trains[indexPath.row]

cell.textLabel?.text = train.name
cell.imageView?.image = UIImage(named: train.image)
return cell
}

// MARK: - Navigation

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let indexPath = self.tableView.indexPathForSelectedRow
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
}
}

将 JSON 解析为 TableView

import UIKit

let feed = "http://lapi.transitchicago.com/api/1.0/ttarrivals.aspx?key=keygoeshere&mapid=41320&outputType=JSON"

class TableViewController: UITableViewController {

class Destinations {
var destination: String = ""
var time: String = ""
}

var records = [Destinations]()

override func viewDidLoad() {
super.viewDidLoad()
parseData()
}

// MARK: - Table view data source

override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return records.count
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
let destinationRow = records[indexPath.row]

cell.textLabel?.text = destinationRow.destination
cell.detailTextLabel?.text = destinationRow.time
return cell
}

func parseData() {
guard let feedURL = URL(string: feed) else {
return
}
let request = URLRequest(url: feedURL)
let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
if error != nil {
print("Error")
}
else {
if let content = data {
do {
let json = try JSONSerialization.jsonObject(with: content, options: []) as? [String:Any] ?? [:]

if let ctattimetable = json["ctatt"] as? [String:Any] {
if let estArrivalTime = ctattimetable["eta"] as? [[String:Any]] {
for item in estArrivalTime {
if let headingTowards = item["destNm"] as? String,
let arrivalTime = item["arrT"] as? String {
let record = Destinations()
record.destination = headingTowards
record.time = arrivalTime
self.records.append(record)
}
self.tableView.reloadData()
}
}
}
}
catch { /* Handle error */ }
}
}
}
task.resume()
}
}

最佳答案

基本上,您已经自己想通了:)。

经典的方法是使用 TableView Controller #1 作为其 Root View Controller 的导航 Controller ,该 Controller 显示火车线路列表。配置一个原型(prototype)单元以显示有关火车线路的一般信息。此外,连接此单元格的选择转场以显示 TableView Controller #2。

TableView Controller #2 可以有一个原型(prototype)单元格,显示有关目的地的信息(名称和到达时间)。

在 TableView Controller #1 的 prepare(for:sender:) 中,只需遵循代码模板的注释:segue.destinationViewController 将成为 TableView Controller # 2即将上映。按原样检索它并使用有关所选火车线路的详细信息(所选火车线路的目的地列表)对其进行配置。

或者“我不确定这是否有效”是什么意思?

无论如何,您可以考虑的替代方案(例如,取决于您的目标屏幕尺寸)是使用 Split View Controller 或单 TableView Controller ,当您点击火车线路时,它会展开以显示内联目的地。

希望这能让您走上正轨,可以这么说 :)。

关于ios - Swift 3 TableView Segue 到多个其他 TableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44014019/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com