簡體   English   中英

關閉視圖時傳遞數據

[英]Passing data while dismissing a view

我正在使用一個具有兩個不同視圖的應用程序,這些視圖可以模態呈現一個“設置” viewController,其中嵌入了tableView。 要將數據從嵌入式tableView傳遞到前兩個視圖,我將不得不在每個視圖轉換中使用prepareForSegue(據我所知)。 但是,當我進入“設置”視圖並點擊“完成”時,我想回到以前的視圖。 據我所知,要做到這一點就必須消除這種觀點。 我可以在關閉視圖時將數據從一個視圖傳遞到另一個視圖嗎? 如果沒有,將如何實現?

注意:請隨時糾正我,我仍在開始應用程序開發,我說的某些話可能是完全錯誤的。

有幾種方法可以完成此操作。

您可以定義從展示的視圖控制器到另一個視圖控制器(通常是執行原始演示的VC)的展開序列 可以通過類似於“常規” segue的按鈕來觸發放松segue,並且由於它們是segue,因此它們會在關閉的VC中觸發-prepareForSegue: 您可以像使用其他方式那樣將數據推送回去。 本技術說明中記錄了放松的時間。


或者,您可以設置從提供的視圖控制器到另一個VC的委派 此模式已在iOS開發中廣泛使用,涉及幾個步驟:

  • 為類定義一個協議(“ SettingsDelegate”)。 給它一個方法–類似settingsDidChange(_:) 使該方法接受您要傳遞回的數據的參數。
  • 給您的設置控制器一個類型為SettingsDelegate?的弱delegate屬性SettingsDelegate? 首次演示該VC時,請將委托設置為演示者。
  • 使呈現的VC符合委托協議,並實現您認為合適的更新方法。
  • 在呈現的VC調用中,具有“完成”按鈕self.delegate.settingsDidChange(_:) ,傳遞新數據。 主講的VC將獲得此呼叫並在“設置”關閉時進行更新。

首次設置委托模式可能會很棘手,但是隨着您的使用,它將變得更加容易。 它記錄在這里


最后,您可以使用永久性數據存儲來保存設置。UserDefaults是設置數據的不錯選擇–它使您可以通過整個應用程序訪問的方式保留鍵/值對信息。 此處閱讀用戶默認設置。

要在用戶默認值更改時進行更新,您可以讓“設置”控制器在關閉時發布通知。 然后,您應用中的其他VC可以偵聽此通知並根據需要進行更新。

您對prepareForSegue是正確的,您不能在這里使用它,因為您需要使用dismiss才能將Settings viewController從導航堆棧中彈出。 一個非常簡單的解決方案是定義一個全局變量。 全局變量只是存在於應用程序中任何類范圍之外的變量。 例如,您可以在設置viewController文件中執行此操作。

var globalVariable: String
class Settings: ViewController{
    //view controller stuff
    didSelectRowAtIndexPath{
        globalVariable = "Information"
    }
}

然后,當您使用dismiss方法時,您以前的viewcontroller將能夠以globalVariable訪問該變量。 它不必是字符串,也不必在didSelectRowAtIndexpath進行設置,可以根據需要使用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM