首页 文章

PrepareForSegue不在两个TableView控制器之间发送数据

提问于
浏览
0

我试图将测试变量传递给目标控制器,但测试不成功 .

我的表演在这里完成:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        programKeySegue = programKeys[indexPath.section]

        self.performSegue(withIdentifier: "segueSelectedProgram", sender: self)
    }

我准备好了:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "segueSelectedProgam" {
            let selectedProgramVC = segue.destination as! SelectedProgramTableViewController
            selectedProgramVC.programKey = "test" //programKeySegue
        }
    }

并在目标控制器中:

var programKey: String?

但是当我在viewDidLoad中打印(programKey)时,'nil'被打印到控制台 . 我之前使用过这种方法,它一直很好用 . 谁能告诉我我做错了什么?

我厌倦了从准备segue中删除覆盖,我尝试将自己附加到performsegue上,我尝试分配不同的变量来传递 . 没有任何效果 .

1 回答

  • 1

    如评论中所述,您的问题是由输入错误引起的 . 你可以通过不使用字符串比较来防止这种情况......

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    
        // If there are multiple segues to this destination, you can  
        // perform a similar check on the source
    
        if let selectedProgramVC = segue.destination as? SelectedProgramTableViewController
            selectedProgramVC.programKey = "test" //programKeySegue
        }
    }
    

    此外,您可以使用视图控制器名称作为故事板中的segue名称,然后...

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        programKeySegue = programKeys[indexPath.section]
    
        self.performSegue(withIdentifier: String(describing: SelectedProgramTableViewController .self), sender: self)
    }
    

    et voila ...没有字符串!

相关问题