自己在跟一个教程入门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()
是什么时候触发呢?
실행 순서를 알 수 있는 방법은 일반적으로 두 가지가 있습니다.
print
기능인 인쇄 포인트를 설정합니다중단점을 설정하세요. 기호식 중단점을 설정한 다음 호출 스택을 한 눈에 확인할 수 있습니다.
1.didSelect
2.performSegue(withIdentifier: "ShowChecklist", 보낸 사람: checklist)
3.prepare(segue의 경우: UIStoryboardSegue, 보낸 사람: Any?)
사실 메소드에 커스텀 프린트를 작성해 보면 실행 순서를 알 수 있습니다