自己在跟一个教程入门iOS,有些问题不太清楚,希望得到解答。
简单的说就是checklist
对象通过sender从AllListsTableViewController
传送到ChecklistViewController
中,其中有用到的AllListsTableViewController
的prepare()
和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()
是什么时候触发呢?
PHP中文网2017-04-18 09:42:26
There are generally two ways to know the execution order:
Set the print point, which is the print
function
Set breakpoints. For problems like yours, you can set symbolic breakpoints and then view the call stack. The calling sequence will be clear at a glance
迷茫2017-04-18 09:42:26
1.didSelect
2.performSegue(withIdentifier: "ShowChecklist", sender: checklist)
3.prepare(for segue: UIStoryboardSegue, sender: Any?)
In fact, if you write a custom print in the method, you will know the execution order