簡體   English   中英

彈出“關閉”后刷新父視圖上的IBOutlet外觀

[英]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.

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