[英]Refresh IBOutlet appearance on parent view after popup segue is 'dismissed'
我有一個小型應用程序,它包含一個主屏幕和一個“設置”屏幕(這是一個彈出模式)。 我使用iOS segue加載設置彈出窗口。
在設置彈出窗口中,您實際上將背景設置為亮或暗,但是我不確定模態被消除后如何加載“ makeScreenLight”方法。
我是否使用viewDidAppear ,如何調用它?
還是在關閉彈出窗口之前或期間將它與dismiss方法一起使用:
@IBAction func BackFromSettings(_ sender: AnyObject) {
dismiss(animated: true, completion: nil)
}
有多種方法可以實現此目的,包括全局狀態,通知和委派。 我將使用委派示例:
首先,我們將創建一個定義委托關系的協議。
protocol SecondViewControllerDelegate: class {
func settingsUpdated(light: Bool)
}
接下來,我們將使第一個視圖控制器符合此新協議,並實現其一種方法。 當我們選擇時,我們還將確保將第二個視圖控制器的委托設置為第一個視圖控制器。
class FirstViewController: UIViewController, SecondViewControllerDelegate {
func settingsUpdated(light: Bool) {
// modify the UI here
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
guard let secondViewController = segue.destination as? SecondViewController else { return }
secondViewController.delegate = self
}
}
當第二個視圖控制器中發生動作時(在本例中為按下開關),我們可以在委托上調用該方法。 這將在第一個視圖控制器中進行更改。
class SecondViewController: UIViewController {
weak var delegate: SecondViewControllerDelegate?
@IBAction func buttonPressed(_ sender: UISwitch) {
delegate?.settingsUpdated(light: sender.isOn)
}
@IBAction func backFromSettings(_ sender: AnyObject) {
dismiss(animated: true, completion: nil)
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.