Передача данных через протоколы делегатов перед удалением между контроллерами представления - PullRequest
0 голосов
/ 08 ноября 2018

У меня быстрый вопрос 4, надеюсь, кто-то знает ответ, потому что Google не ...

У меня есть 2 ViewControllers, первый контроллер загружает второй, как это:

// просмотр контроллера 1:

class ViewController: UIViewController,UITextFieldDelegate,popupDelegate {

  func pass_data(updated: String) {
    print(updated)
  }

  func textFieldDidBeginEditing(_ textField: UITextField) {
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let ivc = storyboard.instantiateViewController(withIdentifier: "calendar_view")
    ivc.modalTransitionStyle = .crossDissolve
    self.present(ivc, animated: true)
  }
}

// просмотр контроллера 2:

protocol popupDelegate {
  func pass_data(updated: String)
}

class DatePopupViewController: UIViewController {

  var dataDelegate: popupDelegate?

  @IBAction func cal_save_data(_ sender: UIButton) {
      // save data here
      dataDelegate?.pass_data(updated:"pass data from vc2")

      let transition: CATransition = CATransition()
      transition.duration = 0.2
      transition.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeInEaseOut)
      transition.type = CATransitionType.fade
      transition.subtype = CATransitionSubtype.fromBottom
      self.view.window!.layer.add(transition, forKey: nil)
      self.dismiss(animated: false, completion: nil)

    }
}

// поэтому я попытался создать протокол, затем передать данные, прежде чем уволить, но, похоже, не работает. что я делаю не так?

1 Ответ

0 голосов
/ 08 ноября 2018

Вы не устанавливаете делегат нового экземпляра контроллера с помощью icv.dataDelegate = self

func textFieldDidBeginEditing(_ textField: UITextField) {

    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let ivc = storyboard.instantiateViewController(withIdentifier: "calendar_view") as! DatePopupViewController

    ivc.modalTransitionStyle = .crossDissolve
    icv.dataDelegate = self

    self.present(icv, animated: true)
}

Приведите созданный экземпляр контроллера представления к DatePopupViewController для доступа к набору dataDelegate.

...