Ios Can';t使用segue将数据传递给第二个控制器
当tableview中的单元格被按下时,我无法让一个简单的序列工作。在我点击两个不同的项目后,它确实转到下一个视图。但我无法将任何值从第一个控制器传递到第二个控制器。如果我在第二个控制器中为标签设置一个值,并将其加载到Ios Can';t使用segue将数据传递给第二个控制器,ios,swift,segue,Ios,Swift,Segue,当tableview中的单元格被按下时,我无法让一个简单的序列工作。在我点击两个不同的项目后,它确实转到下一个视图。但我无法将任何值从第一个控制器传递到第二个控制器。如果我在第二个控制器中为标签设置一个值,并将其加载到viewDidLoad方法中,它就会显示出来 我快发疯了,因为我多年来一直想得到这份工作 我的故事板: CategoryListViewController(第一个控制器): FormulaListViewController(第二个控制器): 我的错误在哪里?我做错了什么 我非常
viewDidLoad
方法中,它就会显示出来
我快发疯了,因为我多年来一直想得到这份工作
我的故事板:
CategoryListViewController(第一个控制器):
FormulaListViewController(第二个控制器):
我的错误在哪里?我做错了什么
我非常感谢您所需要的任何帮助您需要的是
didSelectRowAt
而不是didSelectRowAt
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
performSegue(withIdentifier: "showFormulaList", sender: self)
}
还要确保segue source是vc而不是cell,并且由于您在didrowat
中触发segue,因此
if let indexPath = tableView.indexPathForSelectedRow
将为零您已使用的
didrowat
:
func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
performSegue(withIdentifier: "showFormulaList", sender: self)
}
您需要使用didSelectRowAt
:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
performSegue(withIdentifier: "showFormulaList", sender: self)
}
您应该使用didSelect而不是DIDSELECTROWAT,而且您应该传递比self更好的内容,因为使用self您传递的是整个类别列表视图控制器
试着像这样通过测试
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
performSegue(withIdentifier: "showFormulaList", sender: indexPath)
}
并更改了此中的函数prepare
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "showFormulaList" {
if let indexPath = sender as? IndexPath {
let category = self.categoryList[indexPath.row]
let formulaListViewController = (segue.destination as! UINavigationController).topViewController as! FormulaListViewController
formulaListViewController.fuckSwift = category
formulaListViewController.navigationItem.leftBarButtonItem = splitViewController?.displayModeButtonItem
formulaListViewController.navigationItem.leftItemsSupplementBackButton = true
}
}
}
如果这无法帮助您调试代码并找到丢失变量的位置:)
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
performSegue(withIdentifier: "showFormulaList", sender: self)
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
performSegue(withIdentifier: "showFormulaList", sender: indexPath)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "showFormulaList" {
if let indexPath = sender as? IndexPath {
let category = self.categoryList[indexPath.row]
let formulaListViewController = (segue.destination as! UINavigationController).topViewController as! FormulaListViewController
formulaListViewController.fuckSwift = category
formulaListViewController.navigationItem.leftBarButtonItem = splitViewController?.displayModeButtonItem
formulaListViewController.navigationItem.leftItemsSupplementBackButton = true
}
}
}