Как я могу отправить данные обратно на первый контроллер представления после обнаружения, что была нажата кнопка возврата? - PullRequest
0 голосов
/ 19 марта 2019

Теперь, используя шаблон делегата для передачи данных:

Я реализовал эту функцию:

 var overviewController = addOverview()

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

func setValues(){
    overview.name = buildingName.text!
    overview.city = city.text!
    overview.contact = contactName.text!
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "MM-dd-yyyy"
    overview.date = dateFormatter.string(from: datePicker.date)
    overview.email = email.text!
    overview.building = buildingTypes[buildingPicker.selectedRow(inComponent: 0)]
    overview.freq = cleaningFreqs[cleaningFreqPicker.selectedRow(inComponent: 0)]
    overview.phone = phoneNumber.text!
    overview.sft = sqFt.text!
    overview.state = State.text!
    overview.street = street.text!
}



// MARK: - Navigation

override func willMove(toParent parent: UIViewController?) {
    super.willMove(toParent:parent)
    if parent == nil {
        setValues()
        print("Hello")
        delegate?.setValues(obj: overview)
    }
}

И вот я setValues ​​из протокола, который я написал:

func setValues(obj: overviewProps){
    overview = obj
}

Однако после печати одного из свойств объекта данные не были переданы.

Ответы [ 3 ]

1 голос
/ 19 марта 2019

Существует много способов передачи / обмена данными между двумя viewControllers. Я не знаю, как выглядит ваша реализация. Но вы можете использовать шаблон делегата для достижения вашей цели. Используйте делегат и запускайте методы, когда хотите передать данные.

Как я уже сказал, есть и другие решения. Но вам решать, какой из них вы хотите выбрать.

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

Правильный способ передачи данных между текущим представлением и корневым представлением с вашим дизайном навигации - запуск перехода.

Посмотрите на следующую статью. Это в Swift 3, но это должно дать вам хорошее начало для перевода этого в Swift 4.2

https://link.medium.com/b4eFIx7LaV

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

Вы можете использовать шаблон Делегата или использовать Observer.См. Эти примеры для справки.

Редактировать: используяделегат на основе вашего кода

протокол

protocol SetValueDelegate {
    func didFinishSetValue(obj: Overview)
}

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

class FirstViewController: UIViewController, SetValueDelegate {

   var secondViewController = SecondViewContrller()

   override func viewDidLoad() {
       super.viewDidLoad()
       secondViewController?.delegate = self
   }

   func didFinishSetValue(obj: Overview) {
       // when it comes back to the first screen you can use ->> obj data
   }

}

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

class SecondViewController: UIViewController {
   var delegate: SetValueDelegate?

   override func viewDidLoad() {
       super.viewDidLoad()
       …
   }
   override func willMove(toParent parent: UIViewController?) {
      super.willMove(toParent: parent)
      if parent == nil {
         setValues()
         …
         self.delegate?.didFinishSetValue(obj: overview)
      }
   }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...