2016-03-01 75 views
2

我想連接2個控制器與segue。我有一個6按鈕的視圖控制器,點擊一個按鈕後將顯示一個tableviewcontroller。我所做的所有的鏈接,給標識符Segue公司等UIButton觸發Segue

tableviewcontroller

有根據哪個按鈕應顯示過濾後的結果數組觸發SEGUE

我應該怎麼寫prepareforsegue方法?

這是我在做什麼

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

    if segue.identifier == "chooseBrand" { 

     if sender?.tag == 1 { 
      let destinationController = segue.destinationViewController as! SelectionTableViewController 
      let numberOfCameras = destinationController.Camera.count 

}

的問題是,我收到此錯誤信息

「無法投型的價值 '的UINavigationController'(0x10a0ef588) 到'myApp.SelectionTableViewController'(0x108658b90)。「

如何根據按下哪個按鈕來定義selectiontableviewcontroller中的tableview的內容?

非常感謝任何形式的幫助:)

回答

2

究竟什麼是發送者嗎?錯誤是說標籤= 1的發件人不是SelectionTableViewController。

無論如何,你可以做的只是將每個按鈕連接到相同的動作插座方法,並在兩個控制器之間有一個通用的segue。當你點擊按鈕A,B,C,D,E或F時,只需檢查他們的tag(或將它們存儲爲控制器類中的變量)並將任何你想要的內容發送給控制器。控制器之間的連線位於兩個控制器之間,而不是來自其他控制器的每個UIButtonsegue,這一點非常重要。在下面的例子中,我假設你將六個UIButton中的每一個都存儲爲類變量。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "segueFromFirstToSecond" { 
     let destinationController = segue.destinationViewController as! SelectionTableViewController 
     if sender = button1 { 
      let numberOfCameras = destinationController.Camera.count 
     } else if sender == button2 { 
      let numberOfCameras = destinationController.Camera.count 
     }   
} 

@IBAction func buttonPressed(sender: AnyObject) { 
    performSegueWithIdentifier(segueProfileToPul, sender: sender) 
} 

將所有按鈕連接到buttonPressed()。我不認爲這行let numberOfCameras = destinationController.Camera.count工作,因爲SelectionTableViewController尚未實例化,因此它的變量沒有值(我認爲)。你正在尋找的可能是設置這個值如此destinationController.Camera.count = someValue。也許我錯了。

編輯 我上傳了一個測試項目,顯示我的意思。注意我在故事板中的聯繫。下載here

+0

感謝您的回答。發件人是帶有標籤1的按鈕。你說得對,它不能運行destinationController.Camera.count,但我找到了使它工作的方法。我會嘗試將按鈕連接到@IBAction,但我怎麼能說tableviewcontroller根據點擊按鈕在表中顯示不同的值? – aspnet82

+0

你所做的是,你可以發送某種標誌,這取決於哪個按鈕是發件人。您可以在TableViewController中設置一個變量,該變量設置爲0,1,2,3,4或5,然後根據此變量設置佈局,數據和內容。因此,在prepareForSegue中設置變量:destinationController.variable = 1.最好使用enum作爲變量。 – ClockWise

+0

我更新了一個測試項目。 – ClockWise