[英]Passing data while dismissing a view
有幾種方法可以完成此操作。
您可以定義從展示的視圖控制器到另一個視圖控制器(通常是執行原始演示的VC)的展開序列 。 可以通過類似於“常規” segue的按鈕來觸發放松segue,並且由於它們是segue,因此它們會在關閉的VC中觸發-prepareForSegue:
您可以像使用其他方式那樣將數據推送回去。 在本技術說明中記錄了放松的時間。
或者,您可以設置從提供的視圖控制器到另一個VC的委派 。 此模式已在iOS開發中廣泛使用,涉及幾個步驟:
settingsDidChange(_:)
。 使該方法接受您要傳遞回的數據的參數。 SettingsDelegate?
的弱delegate
屬性SettingsDelegate?
。 首次演示該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.