iOS中通过segue传值的问题
PHPz
PHPz 2017-04-18 09:40:26
0
2
647

自己在跟一个教程入门iOS,有些问题不太清楚,希望得到解答。
简单的说就是checklist对象通过sender从AllListsTableViewController传送到ChecklistViewController中,其中有用到的AllListsTableViewControllerprepare()tableView(didSelectRowAt)两个方法,不太清楚执行顺序。

AllListsTableViewController.swift

import UIKit class AllListsTableViewController: UITableViewController { var lists: [Checklist] required init?(coder aDecoder: NSCoder) { lists = [Checklist]() super.init(coder: aDecoder) var list = Checklist(name: "Birthdays") lists.append(list) list = Checklist(name: "Groceries") lists.append(list) list = Checklist(name: "Cool App") lists.append(list) list = Checklist(name: "To Do") lists.append(list) } //点击任意一行,都需要吧对应的checklist对象放进prepare中 //prepare在viewDidLoad()之前 //通过sender 送到ChecklistViewController之后,viewDidLoad()才能更改标题 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "ShowChecklist" { let controller = segue.destination as! ChecklistViewController controller.checklist = sender as! Checklist } } override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { // #warning Incomplete implementation, return the number of rows return lists.count } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { // let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath) let cell = makeCell(for: tableView) let checklist = lists[indexPath.row] cell.textLabel!.text = checklist.name cell.accessoryType = .detailDisclosureButton return cell } override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { let checklist = lists[indexPath.row] //点击后把checklist放进segue performSegue(withIdentifier: "ShowChecklist", sender: checklist) } func makeCell(for tableView: UITableView) -> UITableViewCell { let cellIdentifier = "Cell" if let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier) { return cell } else { //如果table view找不到一个cell去重用,就会到else这去手动创建一个cell return UITableViewCell(style: .default, reuseIdentifier: cellIdentifier) } } }

想了想应该就是对prepare()不太了解,不太清楚它什么时候调用,点击row后触发tableView(didSelectRowAt)后把checklist对象放入segue中,但prepare()是什么时候触发呢?

PHPz
PHPz

学习是最好的投资!

全部回覆 (2)
Ty80

想要知道執行順序一般有兩種方式:

  1. 設定列印點,就是print函數了

  2. 設定斷點,像你這樣的問題就可以設定符號斷點,然後查看呼叫棧,呼叫順序就一目了然了

    迷茫

    1.didSelect
    2.performSegue(withIdentifier: "ShowChecklist", sender: checklist)
    3.prepare(for segue: UIStoryboardSegue, sender: Any?)

    其實你在方法裡面寫個自訂的列印,就知道執行順序了

      最新下載
      更多>
      網站特效
      網站源碼
      網站素材
      前端模板
      關於我們 免責聲明 Sitemap
      PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!