2016-10-15 100 views
1

我試圖從viewcontroller只有當我的條件得到滿足時,才能從secondviewcontroller。我已經從viewcontroller中的按鈕連接到2ndviewcontroller。到目前爲止,我有:有條件的segue傳遞數據?

@IBAction func switchView(_ sender: AnyObject) { 
     // if a and b's textfields aren't empty 
     if(!(a.text?.isEmpty)! && !(b.text?.isEmpty)!) { 
      a1 = a.text!; 
      b1 = b.text!; 
     }else{ 
      // do something 
     } 

    } 

override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool { 
    if(identifier == "2ndviewcontroller") { 
     if(!(a.text?.isEmpty)! && !(b.text?.isEmpty)!) { 
      return true 
     } 
    } 
    return false 
} 

有了這個,我已經能夠使SEGUE只有當A和B的文本字段不爲空。這正是我想要的,但我也希望將數據從viewcontroller傳遞給2ndviewcontroller。

func prepForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "2ndviewcontroller" { 
     let 2ndviewcontroller = segue.destination as! 2ndviewcontroller 
      2ndviewcontroller.c = a 

     } 
    } 
} 

我使用上面的代碼將數據從viewcontroller傳遞到2ndviewcontroller。問題是我不知道如何將它們合併到傳遞數據中,並且只有在滿足條件時纔會使其延續。當我有兩個函數時,bool函數正確執行,但prepForSegue不傳遞數據。當我將bool函數註釋掉時,prepForSegue會傳遞數據,但我無法應用製作segue的條件。

編輯:通過使用下面的評論中提供的prepareForSegue方法修復。

+2

你爲什麼要合併它們?他們是兩種不同的方法。一旦決定是否執行segue,另一個允許您根據需要傳遞數據。如果賽格不應執行,你會傳遞什麼數據? –

+0

當我有兩個函數時,布爾函數正確執行,並在條件滿足時進行延遲。但是,傳遞數據的函數不起作用。當我註釋掉布爾函數時,我可以很好地傳遞數據,但是當我點擊按鈕時,無論條件是否滿足,當然我都會繼續。我已更新我的問題以澄清。 – Chrine

+2

兩者都應該被執行。正確的方法名稱是'prepareForSegue',而不是'prepForSegue'。 –

回答

2

正如評論中所述,方法名稱應該是prepareForSegue,而不是prepForSegue