iOS中通过segue传值的问题 财富值35

2016-10-12 08:00发布

自己在跟一个教程入门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()是什么时候触发呢?

5条回答
淘修车网 - 这个人很懒,什么都没留下
1楼 · 2016-10-12 08:34.采纳回答

设置打印点,就是print函数了

想要知道执行顺序一般有两种方式:

其实你在方法里面写个自定义的打印,就知道执行顺序了

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

设置断点,像你这样的问题就可以设置符号断点,然后查看调用栈,调用顺序就一目了然了

一周热门 更多>