DAY 22 『 连接 API 实作 - 天气 APP 』Part4

昨天介绍了如何将资料显示在手机画面上,今天会介绍如何辨别点选到哪一个城市,以及将城市天气资讯回传到手机上。


在专案底下 New Group / New File / 选 Cocoa Touch Class

由於只有 City Name 会改变,因此只需拉它的 IBOutlet 即可。

用全域变数来回传Cell城市选单,在 MainVC.swift 加入 var grade = ""

在 TableViewCell.swift 的 override func setSelected(_ selected: Bool, animated: Bool) 里,加入回传城市名称的程序码

override func setSelected(_ selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)
    grade = cityName.text! // 使用全域变数作为回传城市名称
}

在 TableViewVC.swift 的 override func viewDidLoad() 里加入self.cityTableView.register(UINib(nibName: "TableViewCell", bundle: nil), forCellReuseIdentifier: "cityCell")

在 class SecondVC: UIViewController 外加入 Protocol 协定

在 class SecondVC: UIViewController 里加入:
var delegate: TableViewVCprotocol!
宣告这个画面会遵循 TableViewVCprotocol,并请委任目标(delegate)去处理 ChangeProtocol 的事件

在 extension TableViewVC: UITableViewDelegate,UITableViewDataSource 里,加入「 判断使用者点选了TableView的第几列 」的程序码

// MARK: - 使用者点选了TableView的第几列
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    print("使用者点选了第 \(indexPath.row)项,grade= \(grade)")
    // 跳回MainVC
    self.navigationController?.popViewController(animated: true)
    // 请委任目标去处理 getWeatherData 事件
    delegate.getWeatherData(locationName: grade)
}

在 MainVC.swift 外加入:

在 MainVC 跳页去 TableViewVC 的按钮里,加入委任:
toTableViewVC.delegate = self


附上完整程序码: github / H10yiling / WeatherAppXib


这样就完成天气 APP 啦!明天会有新的实作分享,敬请期待!


<<:  Station list screen (1)

>>:  D20 - 「呐,你想要成为什麽颜色?」:将色彩传下去

Day01:从规划开始

前言(作者碎碎念): 大家好我是小精灵,我是个菜鸟工实习生兼研究生,第一次参加铁人赛 想藉着这次的铁...

[30天 Vue学好学满 DAY10] v-for 列表渲染

v-for 基於数组、物件透过迭代、遍历对前端进行渲染。 item in items items: ...

利用谷歌提供的插件彻底解决Chrome隐藏WWW和HTTPS问题

谷歌官方多年前推出可疑网址报告这个扩展程序,原本这个扩展程序是帮助用户检测恶意网站和反馈恶意网站的。...

Day27 interrupt 的处理程序

前言 昨天讲完了上半部的考量之後,可以知道上半部就是要追求快速,能尽快把事情处理好交给下半部就是上半...

D26 - 与MySQL相异的部分

因为一开始的目的之一是想要找一套兼容MySQL可尽量无痛转移的资料库,所以兼容程度是蛮重要的考量。官...