xcode - 使用 prepareForSegue 在表视图之间传递索引不起作用
问题描述
我正在尝试做的事情:
当在tableViewController 1中点击一个类别时,相应的信息会显示在tableViewController 2中
我如何尝试这样做:
我var index = 0
在 tableViewController 1index
中有一个属性。等于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 1index
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
}
}
接下来,viewWillAppear
tableViewController2 的方法使用新的值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 的单元格
问题:
它并不总是有效。似乎落后了一步。如果我点击另一个类别,即公式(这是indexPath.row
数字 1),它将加载解剖。然后,如果我回到 tableViewController 1 并再次按 FORMULAS ,它会正常工作。
我以为我把 if 语句放在了错误的位置,所以我把它从viewDidLoad
tableViewController 2 的方法移到了viewWillAppear
方法中。但这并没有解决这个问题。
我错过了什么?先感谢您。
解决方案
我从以下位置更新了我的覆盖功能:
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
}
}
推荐阅读
- google-cloud-platform - 谷歌计算引擎时区
- swift - 如何提取具有最高置信度值的标签并在 Swift 中打印出来?
- shader - SFML Shaders 制服:通过我自己的课程
- javascript - 在 React 中在暗模式和亮模式之间切换
- google-colaboratory - PyAV 未安装错误但已安装 (GoogleColab)
- c# - 使用 ConfuserX 混淆 WPF 项目
- react-native - 警告动画:未指定`useNativeDriver`。反应原生 62.2
- visual-studio-code - 如何在 VS Code 中重新创建 Ctrl+D(一次有选择地查找和编辑多个事件)
- jdbc - 将 Apache Calcite CSV 示例打包到 JDBC 驱动程序中
- c# - 如何通过控制台应用程序(C#)跟踪用户发送的电子邮件