Как узнать, когда VC2 был уволен на VC1? - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть ViewController1, который идет в ViewModel, а затем в Coordinator, чтобы представить ViewController2.

Проблема заключается в следующем: мне нужно знать, когда VC2 был отклонен на VC1.

Что мне нужно сделать : Когда VC2 закрывается, мне нужно перезагрузить таблицу из VC1.

Я не могу использовать делегат, поскольку не могу связаться между ними (из-за координатора).

Любая помощь, пожалуйста?

Добавление некоторого кода: Мой координатор:

public class Coordinator: CoordinatorProtocol {

public func openVC1() {
    let viewModel = ViewModel1(coordinator: self)
    guard let VC1 = ViewControllerOne.instantiate(storyboard: storyboard, viewModel: viewModel) else {
        return
    }
    navigationController?.pushViewController(VC1, animated: true)
}

public func openVC2() {
    let viewModel = ViewModel2()
    guard let alertPriceDeleteVC = ViewControllerTwo.instantiate(storyboard: storyboard, viewModel: viewModel) else {
        return
    }
    let nav = UINavigationController(rootViewController: VC2)
    navigationController?.present(nav, animated: true, completion: nil)
}

CoordinatorProtocol:

public protocol CoordinatorProtocol {
    func openVC1()
    func openVC2()
}

Мой ViewModel1, вызывающий VC2 через координаторDelegate:

func openVC2() {
    coordinator.openVC2()
}

Что я делаю когда я заканчиваю sh ViewController2 и отправляю пользователя обратно, делаю VC1:

navigationController?.dismiss(animated: true, completion: nil)

1 Ответ

0 голосов
/ 28 февраля 2020

Вам необходимо присвоить значение делегата из prepare. Или вы можете назначить делегата инициализацией RedScreenV C (self) из вашего ViewController, если вы не хотите использовать раскадровку / xib.

import UIKit

class ViewController: UIViewController, NavDelegate {
    func navigate(text: String, isShown: Bool) {
        print("text: \(text) isShown: \(isShown)")
    }


    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if (segue.identifier == "RedScreenVC") {
            let redScreenVC = segue.destination as? RedScreenVC
            redScreenVC?.delegate = self
        }
    }

    @IBAction func nextPageButtonEventLustener(_ sender: Any) {
        performSegue(withIdentifier: "RedScreenVC", sender: sender)
    }
}



import UIKit

protocol NavDelegate {
    func navigate(text: String, isShown: Bool)
}
class RedScreenVC: UIViewController {

    weak var delegate: NavDelegate?

    var redView = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: UIScreen.main.bounds.size.height))

    var navigateButton: UIButton = {
        let button = UIButton(frame: CGRect(x: 200, y: 350, width: 150, height: 50))
        button.setTitle("Navigate", for: .normal)
        button.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)
        button.backgroundColor = .blue
        return button
    }()

    @objc func buttonAction(){
        if self.redView.backgroundColor == .gray {
            self.redView.backgroundColor = .systemPink
        }
    self.delegate.navigate(text:"", isShown: true)

    }

    override func viewDidLoad() {
        navigateButton.layer.cornerRadius = 25
        redView.backgroundColor = UIColor.gray

        delegate.navigate(text: "Navigation Success", isShown: true)

        view.addSubview(redView)

        view.addSubview(navigateButton)
    }

}

Если вы не хотите использовать раскадровку.

let redScreenVC = RedScreenVC()

redScreenVC.delegate = self

    class RedScreenVC: UIViewController {
      override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

    init() {
        super.init(nibName: nil, bundle: nil)
        self.initialize()
    }

    func initialize() {
        self.view.backgroundColor=CustomColor.PAGE_BACKGROUND_COLOR_1
        //From here you need to create your email and password textfield
    }
}
...