Передача данных назад без использования перехода? - PullRequest
0 голосов
/ 26 декабря 2018

Я не использовал storyboard, как я мог передавать данные назад программно, не используя переход в Xcode 4.2?

Я пытался создать переход программно (для передачи данных назад через делегати протоколы) но я застрял ... Потому что он включает в себя имя идентификатора для segue ...

Я кодирую свое приложение без использования раскадровки ...

    @objc func getWeatherTapped() {

        let mainStoryBoard = UIStoryboard(name: "Main", bundle: Bundle.main)

        guard let destinationViewController = mainStoryBoard.instantiateViewController(withIdentifier: "") as? WeatherViewController else {

            print("Couldn't find the viewController")

            return

        present(destinationViewController, animated: true, completion: nil)
    }
}

Как я мог это исправить?Любая помощь?

Заранее признателен!

1 Ответ

0 голосов
/ 26 декабря 2018

Начните с создания protocol, которое определяет действия / операции, которые вы хотите разрешить ...

protocol DataPassingDelegate {
    var someReallyImportantData: String { get set } // Or what ever type
}

В контроллере назначения определите свойство типа protocol ...

class DestinationViewController: UIViewController {
    var dataPassingDelegate: DataPassingDelegate?
    //...
}

В контроллере вида источника, соблюдайте DataPassingDelegate protocol

class SourceViewController: UIViewController, DataPassingDelegate {
    var someReallyImportantData: String = "" {
        didSet {
            // Update if you need to or simply
            // check the state in viewWillAppear
        }
    }
    //...
}

Перед тем, как нажимать контроллер вида назначения из контроллера источника, установите делегата ...

destinationViewController.dataPassingDelegate = self
present(destinationViewController, animated: true, completion: nil)

Перед тем как открыть контроллер представления назначения, передайте данные обратно ...

dataPassingDelegate = "I have something to say"
dismiss(animated: true, completion: nil)
// or if you're using a navigation controller
// navigationController?.popViewController(animated: true)
...