无法将值传递给另一个viewController?

时间:2016-10-18 16:07:58

标签: ios swift uitableview segue

我在tableview单元格中有一些文本,您将点击它,您将传递单元格的名称,并且您将被推送到另一个视图。

       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

我在另一个视图中创建变量的方式

var passedValue = String()

1 个答案:

答案 0 :(得分: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]
    }
}