Вам нужно будет использовать делегата протокола.
Начните с определения делегата (это может иметь любое количество функций)
protocol SwitchToggleDelegate{
func didToggleSwitch(state: Bool)
}
Во втором виде (с переключателем):
Ссылка на делегата (чтобы вызвать нужный метод)
var switchDelegate: SwitchToggleDelegate? = nil
И вызовите метод делегата от действия вашего переключателя: (Я включил весь код для этого)
class View2: UIViewController {
var switchDelegate: SwitchToggleDelegate? = nil
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func OnSwitchToggled(_ sender: UISwitch) {
switchDelegate?.didToggleSwitch(state: sender.isOn)
}
}
На ваш первый взгляд:
Подпишитесь на нового делегата и добавьте необходимые методы:
class View1: UIViewController, SwitchToggleDelegate { }
func didToggleSwitch(state: Bool){
//Do Something
labelOne.text = "Switch is \(state)"
}
Вам также нужно будет установить делегата первого представления равным второму. Так как для этого я использую контейнерное представление, я использую подготовку для перехода:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "embedded"{
let view2: View2 = segue.destination as! View2
view2.switchDelegate = self
}
}
Теперь, когда переключатель переключается, вызывается метод делегата func didToggleSwitch(state: Bool)
, и все, что подписано на этот метод делегата (например, ваш первый просмотр), будет прослушивать этот обратный вызов делегата и выполнять любой код, который вы подготовили для делегата.