iT邦幫忙

2021 iThome 鐵人賽

DAY 22
0
Mobile Development

ios 的小小實驗室 !系列 第 22

DAY 22 『 連接 API 實作 - 天氣 APP 』Part4

  • 分享至 

  • xImage
  •  

昨天介紹了如何將資料顯示在手機畫面上,今天會介紹如何辨別點選到哪一個城市,以及將城市天氣資訊回傳到手機上。


在專案底下 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 啦!明天會有新的實作分享,敬請期待!


上一篇
DAY 21 『 連接 API 實作 - 天氣 APP 』Part3
下一篇
DAY 23 『 客製化按鈕 Custom Button 』
系列文
ios 的小小實驗室 !30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言