Где я могу определить поведение замыкания при попытке установить связь между двумя VC? - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть 2 отдельных контроллера представления, и я использую замыкание для связи между ними. Я хочу нажать кнопку на V C one, чтобы изменить цвет фона V C two. Однако нажатие кнопки со следующим кодом ничего не делает:

class VCOne: UIViewController {

    var delta: () -> Void = { }

    @objc func buttonPressed() {
       delta()
     }

 override func viewDidLoad() {
    super. viewDidLoad()

    let pageController = PageViewController(transitionStyle: .scroll, navigationOrientation: .horizontal)
            addChild(pageController)
            pageController.didMove(toParent: self)
           pageContainerView.addSubview(pageController.view)



}


class VCTwo: UIViewController {

  override func viewDidLoad() {
    super.viewDidLoad()
    view.backgroundColor = .white

    VCOne().delta = {
       view.backgroundColor = .red
          }
     }
}

Теперь я считаю, что моя ошибка заключается в том, что я создаю новый экземпляр VCOne, когда я снова инициализирую его в viewDidLoad () VCTwo ( ), но я не могу получить доступ к delta () в VCTwo () другим способом.

Как мне решить эту проблему?

1 Ответ

0 голосов
/ 22 апреля 2020

Наиболее распространенный подход заключается в создании свойства делегата в вашем втором контроллере представления.

class VCTwo: UIViewController {

  weak var delegate: VCOne!
  override func viewDidLoad() {
    super.viewDidLoad()
    view.backgroundColor = .white

    delegate.delta = {
       view.backgroundColor = .red
          }
     }
}

Установите значение делегата в VCOne после init VCTwo

...