2016-10-18 36 views
0

我在桌面视图单元格中有一些文字,您将点击它,您将传递单元格的名称,并且您将被推送到另一个视图。无法将值传递给另一个viewController?

 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中打印时,它是okey,但在准备时它是零。
敲击电池后,我已经有了意外发现零而展开的可选值

这就是我的另一个观点

var passedValue = String() 
+2

'valueToPass = vc.passedValue'应该是'vc.passedValue = valueToPass' – dan

+0

此外,你的tableview委托方法正在使用一个较老的swift版本的签名,而你为segue方法准备的是使用Swift 3签名。他们都被叫到了吗? – dan

+0

可能重复[在视图控制器之间传递数据](http://stackoverflow.com/questions/5210535/passing-data-between-view-controllers) –

回答

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] 
    } 
} 
+0

谢谢:)作品 – patrikbelis

相关问题