2017-07-24 108 views
0

我想從SecondViewController傳遞數據到我的FirstViewController,當我點擊我的後退按鈕(UINaviagtionController)。(重新) - 通過點擊後退按鈕後通過數據

對於來自FirstViewController通過我的數據給SecondViewController我這樣做:

if segue.identifier == "showSecondVC" { 
    let vc = segue.destination as! SecondViewController 
    vc.rows = rows[pathForAVC] 
    vc.lap = lapTime[pathForAVC] 
    vc.indexPath = pathForAVC 
} 

但我不知道如何從SecondViewController傳遞數據給FirstViewController,我真的不明白,關於它的堆棧主題溢出。

我想轉讓,當我點擊這裏:

Back button from a NavigationBar

感謝。

回答

1

您可以使用委託模式。你可以抓住後退按鈕按下事件像這樣和更新數據

override func viewWillDisappear(_ animated: Bool) { 
    if self.isMovingFromParentViewController { 
     self.delegate.updateData(data) 
    } 
    } 

有關代表你可以通過this更多信息。

其實事情都取決於你的需求,如果你想要的數據在第一視圖控制器,只要它是在第二個視圖控制器的最新更新,你需要儘快更新數據調用委託。但正如你剛纔提到的問題,你希望它只是在後退按鈕上更新,以上是做這件事的地方。

另一種方法是將數據源設置爲單例,以便它可用於所有視圖控制器,並且更改將反映在所有視圖控制器中。但是,如果絕對必要的話,創建單身人士,因爲這些討厭的人在你的應用程序運行的整個過程中一直存在

+0

感謝您的答案兄弟和謝謝你的網站在斯威夫特。我會做你的關於代表的教程。 – pierreafranck

1

你應該有一個自定義的協議,如:

public protocol SendDataDelegate: class { 
    func sendData(_ dataArray:[String]) 
} 

在這裏,您要發送單個陣列回FirstViewController

然後,讓你的第一個視圖控制器,以符合自定義協議,我想,如:

class FirstViewController: UIViewController, SendDataDelegate 

在第二視圖控制器,創建一個委託的可變用於該協議,如:

weak var delegate: SendDataDelegate? 

,然後你趕上後面的動作和裏面你打電話給你的自定義協議的功能,如:

self.delegate?.sendData(arrayToSend) 

在第一viewController,在賽格瑞功能的準備只需設置類似的委託

vc.delegate = self 
+0

你能解釋一下嗎? – pierreafranck

+0

@pierreafranck我已經更新了答案,請檢查 –

+0

我也會試試。感謝您的更新 – pierreafranck