不能将值传递给另一个 viewController?
Posted
技术标签:
【中文标题】不能将值传递给另一个 viewController?【英文标题】:Cant pass value to another viewController? 【发布时间】:2016-10-18 16:07:57 【问题描述】:我在表格视图单元格中有一些文本,您将点击它,您将传递单元格的名称,并且您将被推送到另一个视图。
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
tableView.deselectRow(at: indexPath as IndexPath, animated: true)
let row = indexPath.row
valueToPass = sections[row]
print(valueToPass)
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
if (segue.identifier == "fromWelcomeToSectionPage")
// initialize new view controller and cast it as your view controller
let vc:sectionPage = segue.destination as! sectionPage
vc.passedValue = valueToPass
我还在另一个控制器中创建了代码来检查
if passedValue == "Základy"
print("it works")
这就是我试图通过它的方式。变量 valueToPass 是全局变量。 Idk,但是当我在 didSelectRowAtIndexPath 中打印它时它还可以,但在准备时它是 nil。点击单元格后,我在展开可选值时意外发现 nil
这就是我在另一个视图中创建变量的方式
var passedValue = String()
【问题讨论】:
valueToPass = vc.passedValue
应该是vc.passedValue = valueToPass
另外,您的 tableview 委托方法使用的是旧 swift 版本的签名,而您的 prepare for segue 方法使用的是 Swift 3 签名。他们都被叫到了吗?
Passing Data between View Controllers的可能重复
@dan 没关系可能是因为它仍然是一样的.. 尝试过.. 是的,他们被调用了。
你确定你的didSelect
方法被调用了吗?你在里面放了一个断点,当你选择一行时它就停在断点处?
【参考方案1】:
您的prepareForSegue
方法在didSelectRowAt
方法之前调用,因此您不能依赖您在didSelectRow
中执行的任何逻辑来帮助传递数据。
您可以在prepareForSegue
中获取选定的行并在那里使用它来获取数据并传递它:
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
if (segue.identifier == "fromWelcomeToSectionPage")
// initialize new view controller and cast it as your view controller
let vc = segue.destination as! sectionPage
let selectedRow = tableView.indexPathForSelectedRow!.row
vc.passedValue = sections[selectedRow]
【讨论】:
以上是关于不能将值传递给另一个 viewController?的主要内容,如果未能解决你的问题,请参考以下文章