我有一个小应用程序,包含一个主屏幕和一个'设置'屏幕(这是一个弹出模式)。我使用iOS segue加载设置弹出窗口。
在设置弹出窗口中,您基本上将背景设置为亮或暗,但我不确定如何加载我的' makeScreenLight'模态解除后的方法。
我是否使用 viewDidAppear ,如何调用它?
或者在解除弹出窗口之前或之时我使用dismiss方法:
@IBAction func BackFromSettings(_ sender: AnyObject) {
dismiss(animated: true, completion: nil)
}
答案 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)
}
}