2015-06-20 119 views
2

我有一個視圖控制器顯示帶有外鍵的標籤。它有4個按鈕,每個按鈕有3個隨機單詞和1個匹配外來單詞的單詞。點擊其中一個按鈕後,需要轉換到底部的兩個視圖控制器中的一個。如果您點擊的按鈕與標籤不匹配,並且右側的視圖控制器顯示您已正確顯示該單詞並在隨機選擇的句子中顯示該單詞,則左側的一個單詞將查看單詞。多個按鈕,每個按鈕都延伸到多個ViewControllers

問題是我一直在googling如何從一個按鈕正確地延續多個視圖,同時在大約5個小時的時間傳遞數據,我不能想出一個解決方案。

:編輯我沒有足夠的聲望發佈圖像。抱歉!這很痛

我試着做一個複雜的prepareForSegue()函數,但我沒有辦法在每個按鈕被按下時調用它。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if ButtonAnswer1.description == testedWord { 
     if (segue.identifier == "segueToAnsweredCorrect") { 
      var acvc : AnsweredCorrectViewController = segue.destinationViewController as! AnsweredCorrectViewController; 
       println(testedWord) 
       println(randomSentenceToTransfer) 
       acvc.testedWord = testedWord 
       acvc.sentenceTransferred = randomSentenceToTransfer 
      } 
     if ButtonAnswer2.description == testedWord { 
      if (segue.identifier == "segueToAnsweredCorrect") { 
       var acvc : AnsweredCorrectViewController = segue.destinationViewController as! AnsweredCorrectViewController; 
       println(testedWord) 
       println(randomSentenceToTransfer) 
       acvc.testedWord = testedWord 
       acvc.sentenceTransferred = randomSentenceToTransfer 
      } 

      if ButtonAnswer3.description == testedWord { 
       if (segue.identifier == "segueToAnsweredCorrect") { 
        var acvc : AnsweredCorrectViewController = segue.destinationViewController as! AnsweredCorrectViewController; 
        println(testedWord) 
        println(randomSentenceToTransfer) 
        acvc.testedWord = testedWord 
        acvc.sentenceTransferred = randomSentenceToTransfer 
       } 

       if ButtonAnswer4.description == testedWord { 
        if (segue.identifier == "segueToAnsweredCorrect") { 
         var acvc : AnsweredCorrectViewController = segue.destinationViewController as! AnsweredCorrectViewController; 
         println(testedWord) 
         println(randomSentenceToTransfer) 
         acvc.testedWord = testedWord 
         acvc.sentenceTransferred = randomSentenceToTransfer 
        } 
      else { 
         func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
       if (segue.identifier == "segueToReviewCard") { 
        var rcvc : ReviewCardViewController = segue.destinationViewController as! ReviewCardViewController; 
        rcvc.translationReviewed = testedTranslation 
        rcvc.wordReviewed = testedWord 
       } 
      } 
     } 
      } 
     } 
    } 
} 
} 

我試圖做一個函數與每個按鈕可用於:

func performSegue(sender: UIButton) { 
// checks if button's text matches the word tested variable's string 
if sender.description == wordTested { 
    self.performSegueWithIdentifier(identifier: "segueToAnswerCorrect", sender: AnyObject?) 
    // I don't know how to pass data outside of prepareForSegue() 
} 
else { 
self.performSegueWithIdentifier(identifier: "segueToReviewCard", sender: AnyObject?) 
    // pass data 
} 
} 

我不知道如何才能正常工作方案和代表還和我不知道,這將是該解決方案與否。

如果你有任何關於這方面的信息,這將是一個救星。

+0

第二個代碼塊實際上應該工作得很好。 – luk2302

+0

'prepareForSegue'已經太晚了,無法控制使用哪個segue。您的'performSegue'功能正處於正確的軌道上。訣竅是'sender'可以是你喜歡的任何對象,所以你可以傳遞可用於'prepareForSegue'函數的數據 – Paulw11

回答

0

你實際上很接近。只是一個小的改動你的performSegue:

func performSegue(sender: UIButton) { 
    if sender.description == wordTested { 
     self.performSegueWithIdentifier(identifier: "segueToAnswerCorrect", sender: sender) 
    } else { 
     self.performSegueWithIdentifier(identifier: "segueToReviewCard", sender: sender) 
    } 
} 

你那麼所有的4個按鍵的連接到這個功能。

然後你改變prepareForSegue:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if (segue.identifier == "segueToAnsweredCorrect") { 
     var acvc : AnsweredCorrectViewController = segue.destinationViewController as! AnsweredCorrectViewController; 
     acvc.testedWord = testedWord 
     acvc.sentenceTransferred = randomSentenceToTransfer 
    } 
    if (segue.identifier == "segueToReviewCard") { 
     var rcvc : ReviewCardViewController = segue.destinationViewController as! ReviewCardViewController; 
     rcvc.translationReviewed = testedTranslation 
     rcvc.wordReviewed = testedWord    
    } 
} 

在你需要設置兩個塞格斯的界面生成器,但按鈕動作沒有塞格斯。

+0

從第一個視圖控制器到另外兩個創建兩個segues? –

+0

是的,兩個從控制器的四個按鈕到兩個控制器,您實際上想要繼續。給予segues正確的標識符和一切應該工作 – luk2302

+0

(發件人:發件人)是天才,我至少用一個小時的語法摔跤。但是,button.description不起作用。在這種情況下,我如何從一個按鈕上抓取文本,這是一個IBAction?每個按鈕都有一個插座和一個IBAction。我是否需要爲每個按鈕製作稍微不同的功能? –