2016-10-18 38 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

相關問題