不能将值传递给另一个 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?的主要内容,如果未能解决你的问题,请参考以下文章

如何将值传递给另一个视图控制器?

将值传递给另一个组件

将值传递给另一个类

如何使用 nodejs 将值传递给另一个函数?

动态地将值(例如:innerHTML)传递给另一个元素作为值

Flutter:如何将值从 streamprovider / listview builder 传递给另一个类