2016-04-03 88 views
0

我被困在Xcode中用Swift傳遞兩個UITableViews之間的參數。如何在Swift中的兩個UITableViewControllers之間傳遞數據?

我已經在這裏看到了一些關於這個問題的問題,但即使我遵循了指示,仍然陷入困境。

我已經設置了我的故事板。我在這裏遇到了問題,因爲我發現的大多數指南都使用「顯示」塞格,但出於某種原因,我只能使用「推」塞格。有沒有辦法,我可以拖動並創建一個「秀」 Segue公司(也許是因爲我通過在Windows和Mac不理解按Ctrl /命令鍵遠程桌面使用Mac?)

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    selectedIndex = indexPath.row 
} 

override func prepareForSegue(segue: (UIStoryboardSegue!), sender: AnyObject!) { 
    if (segue.identifier == "secondSegue") { 
    let controller = segue.destinationViewController as! SecondViewController 
    controller.valuePassed = selectedIndex 
    } 
} 

即使它的工作原理,由於某種原因,通過的指數從來不是現在的指數。相反,在第二個屏幕上收到的索引是之前選擇的索引。

我也嘗試使用「performSegueWithIdentifier」,但隨着我的第二個屏幕打開兩次,當我點擊一個項目。我認爲這是因爲它們之間有一個「推」鏈接以及「performSegueWithIdentifier」。

我不知道如何創建一個Segue標識符,而無需鏈接故事板上的兩個屏幕。所以,我不確定我的代碼是否是錯誤的,如果我應該創建一個「顯示」塞格(我真的是新的iOS編程,我不知道推和顯示之間的實際區別UITableView的上下文),如果我應該以某種方式創建Segue標識符而不鏈接故事板上的屏幕,等等......我真的被卡住了,沒有想法。

感謝任何幫助。謝謝。

+0

據我所知,「顯示」是他們稱之爲「Push」的部分。所以,你很好。 –

+2

'prepareForSegue'在'didSelectRowAtIndexPath'之前被調用。如果你想在'prepareForSegue'中選擇索引,那麼通過'tableView.indexPathForSelectedRow.row'獲取它。 – dan

+1

我認爲這裏發生的事情是因爲當你選擇一個單元格時它將首先調用從單元格到單元格的segue prepareforsegue然後是selectedIndex = indexPath.row。因此,不要將segue與單元格鏈接,而要將VC與VC鏈接起來,並在didselect中調用performSegueWithIdentifier。 –

回答

2

如果要使用performSegueWithIdentifier,請從視圖控制器中拖動segue,而不是從表格視圖單元格中拖出。否則,就像你說的那樣,它會觸發兩次。

而不是存儲selectedIndex,您可以使用UITableViewindexPathForSelectedRow屬性從表視圖中獲取它。它返回一個可選項,所以一定要正確解開它。

+0

這裏的另一篇文章提供了一些關於傳遞數據視圖控制器的例子,這些例子可能也有幫助:http://stackoverflow.com/questions/5210535/passing-data-between-view-controllers?rq=1 – xdeleon

0

嘗試添什麼上面說的,改變你的prepareForSegue代碼如下:

if segue.identifier == "secondSegue" { 

     let destinationVC : SecondViewController = segue.destinationViewController as! SecondViewController 

     // you can now pass whatever data you need to to the next view controller ... for example: destinationVC.dogName = dogName 

    } 

希望這有助於!

相關問題