2014-03-13 52 views
1

我正在Xcode中創建一個應用程序,該應用程序當前由導航控制器,表格視圖控制器和常規視圖控制器組成。如何使用segues

我正在使用StoryBoard,並創建了表視圖和常規視圖控制器之間的連線。在導航欄中,我有一個按鈕,我拖動到StoryBoard中的視圖控制器。當我點擊按鈕時,新的視圖控制器就像它想象的那樣被查看。然後我試圖從表視圖控制器傳遞數據,見下文:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"läggTill"]) 
    { 
     // Get reference to the destination view controller 
     AddPlayerViewController *apv = [segue destinationViewController]; 

     [apv.myTextField setText:@"hello"]; 

    } 

} 

的賽格瑞標識符是「läggTill」,但如果語句中的代碼不執行。

有兩個問題:

這種方法有什麼問題?

這是使用StoryBoard時的最佳方法嗎?我可以通過viewWillDisappear傳遞數據嗎?

我可以使用segues將數據從視圖控制器傳回表視圖控制器嗎?

+2

您可以嘗試更改segue標識符以在代碼和故事板中僅使用英文字符。 – Greg

+1

故事板中的segue標識符具有相同的名稱? –

+1

我可以使用segues將數據從視圖控制器傳回表視圖控制器嗎?使用委託來做到這一點。 –

回答

2

它使世界上所有的意義都能通過你的數據在prepareForSegue:sender:。我不建議在viewWillDisappear中傳遞數據,因爲它只是讓它變得混亂,並且降低了可讀性+更難追蹤。

我認爲你的字符串比較不起作用!把你的標識符字符串的NSLog看看在控制檯上。我有一種感覺,它可能不會比較「ä」字。

關於你的最後一個問題,正如Gabriel.Massana指出的那樣,爲了傳回數據,使用委託是最好的選擇。

注1:我注意到的另一個問題是您可能有「apv」和「avc」的可能錯字。

注2:它失敗的另一個原因是您在目標控制器上調用viewDidLoad之前設置TextField。我建議將它作爲字符串傳遞,並在目的地的viewDidLoad中,將文本設置爲TextField。

+0

我更改爲laggTill,但它不起作用:/ – iHank

+0

@iHank在您的故事板中單擊您的segue並雙擊檢查標識符。看看它是否與你的字符串匹配。 –

+0

謝謝,這篇文章非常有用!看起來像我修飾了「läggTIll」,而不是「läggTill」。我在使用NSLog時看到了它。 – iHank