我正在创建一个简单的气象应用程序。 使用三个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”(与解析的国家/地区不同)。无论您按美国还是法国,都会出现韩国的城市。当我点击法国时,如何获得美国城市?按法国时如何获得法国城市?