我正在尝试做什么:
在 tableViewController 1 中点击类别时,相应的信息会显示在 tableViewController 2
中我是如何尝试这样做的:
我在tableViewController 1中有一个属性var index = 0
。index
等于indexpath.row
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
index = indexPath.row
print("Button tapped\(index)")
}
我有prepareForSegue
将index
传递给tableViewController 2. tableViewController 2也有一个名为var index = 0
的属性。我正在制作subjectDetailTableViewController.index
(tableViewController 2的索引)= tableViewController 1的index
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let subjectDetailTableViewController = segue.destination as? SubjectDetailsTableViewController {
// make the indexes equal between view controllers
subjectDetailTableViewController.index = index
}
}
接下来,tableViewController2的viewWillAppear
方法使用新值index
来确定如何加载单元格
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// Determine the subject tapped, then correspond with the correct information
if index == 0 {
loadAnatomy()
} else
if index == 1 {
loadFormulas()
} else
if index == 2 {
loadHemodynamics()
} else
if index == 3 {
loadProcedures()
} else
if index == 4 {
loadRadiology()
}
}
这样,如果用户在tableViewController1中点击名为ANATOMY(indexPath.row
数字0)的单元格,loadAnatomy()
方法将使用ANATOMY信息填充tableViewController 2的单元格
T 他的问题:
它并不总是有效。这似乎落后了一步。如果我点击另一个类别,即FORMULAS(indexPath.row
数字1),它将加载解剖。然后,如果我回到tableViewController 1并再次按下FORMULAS,它可以正常工作。
我以为我在错误的位置使用了if语句,所以我将它从tableViewController 2的viewDidLoad
方法移到了viewWillAppear
方法。但这并没有解决这个问题。
我错过了什么?提前谢谢。
答案 0 :(得分:0)
我从:
更新了覆盖功能override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let subjectDetailTableViewController = segue.destination as? SubjectDetailsTableViewController {
// make the indexes equal between view controllers
subjectDetailTableViewController.index = index
}
}
要:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
super.prepare(for: segue, sender: sender)
let indexPath = tableView.indexPathForSelectedRow
let index = indexPath?.row
if let subjectDetailTableViewController = segue.destination as? SubjectDetailsTableViewController {
// make the indexes equal between view controllers
subjectDetailTableViewController.index = index!
}
if let mainViewController = segue.destination as? MainViewController {
// Do not animate launch when seguing back to Main Menu
mainViewController.initialLaunch = false
}
}