Подготовка к Segue по возвращении - PullRequest
0 голосов
/ 29 марта 2019

Итак, код, который я пытаюсь реализовать в Swift, основан на этом ответе здесь для передачи данных обратно из ViewController: Передача данных с обратным вызовом

Теперь моя проблема после того, как явызвали:

self.navigationController?.popViewController(animated: true)

Функция Prepare For Segue не была вызвана в моем исходном View Controller.Я предполагаю, что это не должно вызываться в любом случае, но из этого ответа я предполагаю, что есть возможный способ сделать это?


Фрагменты первого вида контроллера

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    //ignore this segue identifier here, this function works when I am showing a new VC
    if(segue.identifier == "certSegue"){
        let certVC = segue.destination as! CertificateViewController
        certVC.profileModel = profileModel
    }

    //this is what I need to be called
    if(segue.identifier == "dpSegue"){
        print("dpSegue")
        let dpVC = segue.destination as! DatePickerViewController
        dpVC.callback = { result in
            print(result)
            print("Data")
            // do something with the result
        }
        //dpVC.dailyBudgetPassedThrough = "Test"
    }
}

 func showDatePicker(){
    let vc = UIStoryboard.init(name: "Main", bundle: Bundle.main).instantiateViewController(withIdentifier: "DatePickerVC") as? DatePickerViewController
    self.navigationController?.pushViewController(vc!, animated: true)

}

Контроллер второго вида

import UIKit

class DatePickerViewController: UIViewController {

    var callback : ((String)->())?

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
}

func sendBackUpdate(){

   print("Callback")
    callback?("Test")
}

@IBAction func cancelButton(_ sender: Any) {
    self.navigationController?.popViewController(animated: true)
}

@IBAction func updateButton(_ sender: Any) {
    sendBackUpdate()
    self.navigationController?.popViewController(animated: true)
}


}

1 Ответ

0 голосов
/ 29 марта 2019

prepareForSegue вызывается, если в Интерфейсном Разработчике подключен переход

  • из ячейки представления таблицы / коллекции в контроллер представления назначения, и ячейка коснулась.
  • из контроллера представления источника в контроллер представления назначения и performSegue(withIdentifier:sender:) вызывается в контроллере представления источника.

Он не вызывается, когда контроллер представления будет представлен с pushViewController

В вашем случае назначьте обратный вызов после создания экземпляра контроллера в showDatePicker, prepare(for segue не требуется.

func showDatePicker(){
    let vc = UIStoryboard(name: "Main", bundle: .main).instantiateViewController(withIdentifier: "DatePickerVC") as! DatePickerViewController
    vc.callback = { result in
        print(result)
        print("Data")
        // do something with the result
    }

    self.navigationController?.pushViewController(vc, animated: true)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...