如何在tableView之间的tableView单元格中进行json解析

时间:2019-05-17 11:54:19

标签: ios swift xcode

我正在创建一个简单的气象应用程序。 使用三个ViewController, 第一个视图中的tableView显示每个国家的名称和图像。 如果单击tableViewCell,则显示在单元格中显示的国家的城市列表的tableView。 (例如,我们->洛杉矶) 这里有问题。在第一个表格视图中,我想解析counties.json文件,然后按cell来获取该国家的城市。

到目前为止,我已经完成了第一个表格视图(代表县)。但是,当我单击每个单元格时,我无法代表每个单元格的城市。

import UIKit

class WorldListController: UIViewController {

    @IBOutlet weak var tableView: UITableView!
    var worlds: [World] = []
    var dataSource: WorldDataSource?
}

extension WorldListController: UITableViewDelegate {
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 65
    }
}

extension WorldListController {
    override func viewDidLoad() {
        let jsonDecoder: JSONDecoder = JSONDecoder()
        guard let dataAsset: NSDataAsset = NSDataAsset(name: "countries") else {
            return
        }

        do {
            self.worlds = try jsonDecoder.decode([World].self, from: dataAsset.data)
            let worldsList = worlds
            print(worldsList[0].countryImage)
            self.dataSource = WorldDataSource(worlds: worldsList)
        } catch {
            print(error.localizedDescription)
        }
        tableView.dataSource = dataSource
        tableView.delegate = self
        tableView.reloadData()
    }


}
import UIKit
import Foundation

class CityListViewController: UIViewController {

    @IBOutlet weak var tableView: UITableView!

    var cities: [City] = []
    var dataSource: CityDataSource?

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let navigationController = segue.destination as? UINavigationController,
            let destination = navigationController.viewControllers.first as? WeatherViewController {
            destination.cities = cities
        }
    }
    @IBAction func backPressed(_ sender: UIButton) {
        dismiss(animated: true, completion: nil)
    }

}

extension CityListViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        let jsonDecoder: JSONDecoder = JSONDecoder()
        guard let dataAsset: NSDataAsset = NSDataAsset(name: "korea") else {
            return
        }

        do {
            self.cities = try jsonDecoder.decode([City].self, from: dataAsset.data)
            let citiesList = cities
            self.dataSource = CityDataSource(cities: citiesList)
        } catch {
            print(error.localizedDescription)
        }

        tableView.dataSource = dataSource
        tableView.delegate = self
        tableView.reloadData()
    }
}

extension CityListViewController: UITableViewDelegate {
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 100
    }
}

import UIKit

class WorldDataSource: NSObject {
    let worlds: [World]

    init(worlds: [World]) {
        self.worlds = worlds
    }
}

extension WorldDataSource: UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return worlds.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: String(describing: WorldCell.self)) as! WorldCell
        let world = worlds[indexPath.row]
        cell.nameLabel.text = world.countryName
        cell.countryImage.image = UIImage(named: world.countryImage)
        return cell
    }
}

import UIKit

class WorldCell: UITableViewCell {

    @IBOutlet weak var nameLabel: UILabel!
    @IBOutlet weak var countryImage: UIImageView!

    static let identifier = "WorldCell"

    var name: String? {
        didSet {
            nameLabel.text = name
        }
    }

    var countrtImg: UIImage? {
        didSet {
            countryImage.image = countrtImg
        }
    }
}
import UIKit

class CityCell: UITableViewCell {

    @IBOutlet weak var cityName: UILabel!
    @IBOutlet weak var tempLabel: UILabel!
    @IBOutlet weak var rainfallProbabilityLabel: UILabel!
    @IBOutlet weak var state: UIImageView!

    static let identifier = "CityCell"

    var name: String? {
        didSet {
            cityName.text = name
        }
    }

    var temp: Int? {
        didSet {
            tempLabel.text = "\(temp ?? 0)"
        }
    }

    var rainfallProbability: Int? {
        didSet {
            rainfallProbabilityLabel.text = "\(rainfallProbability ?? 0)"
        }
    }

    var stateImage: UIImage? {
        didSet {
            state.image = stateImage
        }
    }
}

我已经像第一个代码一样在tableView中解析了“ countries.json”。但是在第二个代码中,我们只是解析“ korea.json”(与解析的国家/地区不同)。无论您按美国还是法国,都会出现韩国的城市。当我点击法国时,如何获得美国城市?按法国时如何获得法国城市?

0 个答案:

没有答案