弹出segue被解除后,在父视图上刷新IBOutlet外观'

时间:2016-12-12 19:49:05

标签: ios swift3 segue

我有一个小应用程序,包含一个主屏幕和一个'设置'屏幕(这是一个弹出模式)。我使用iOS segue加载设置弹出窗口。

在设置弹出窗口中,您基本上将背景设置为亮或暗,但我不确定如何加载我的' makeScreenLight'模态解除后的方法。

我是否使用 viewDidAppear ,如何调用它?

或者在解除弹出窗口之前或之时我使用dismiss方法:

@IBAction func BackFromSettings(_ sender: AnyObject) {
    dismiss(animated: true, completion: nil)
}

1 个答案:

答案 0 :(得分:1)

有多种方法可以实现此目的,包括全局状态,通知和委派。我将举一个使用委托的例子:

首先,我们将创建一个定义委托关系的协议。

protocol SecondViewControllerDelegate: class {
    func settingsUpdated(light: Bool)
}

接下来,我们将使第一个视图控制器符合这个新协议,并实现其一个方法。我们还将确保在我们进行segue时将第二个视图控制器的委托设置为第一个视图控制器。

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)
    }

}