Я пытаюсь реализовать экран входа в систему, который бы помещал данные в контроллер представления, контроллер представления входа в систему вызывается путем переопределения метода didBelect tabBarController, следующим образом:
Обратите внимание, что между TabBarController и ThirdViewController нет никакого перехода, потому что я перезаписываю tabBarController следующим образом:
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, UITabBarControllerDelegate {
// This delegate open the modal view after open the desired view.
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
if viewController is MyThirdViewController {
if let loginPopupVC = tabBarController.storyboard?.instantiateViewController(withIdentifier: "LoginViewController") {
tabBarController.present(loginPopupVC, animated: true)
}
}
}
}
Теперь в моем LoginViewController я анализирую JSON в структуре (LoginResponse) с данными, которые должны заполнять ThirdViewController (имя, фамилия, пол, рождение и т. Д.). Я уже делаю это с этим фрагментом внутри LoginViewController:
struct LoginResponse : Decodable {
var name: String
var surname: String
var sex: String
var birth: String
}
class LoginViewController: UIViewController, UITextFieldDelegate, XMLParserDelegate {
@IBAction func cancelLogin(_ sender: UIButton) {
//LoginViewController will close and ThirdViewController will open
dismiss(animated: true, completion: nil)
}
@IBAction func makeLogin(_ sender: UIButton) {
//LoginViewController brings data, closing itself and opening ThirdViewController
self.updateUI()
self.dismiss(animated: true, completion: nil)
}
func updateUI() {
do {
let jsonDecoder = JSONDecoder()
let myjson = "{\"name\": \"MyName\", \"surname\": \"MySurname\", \"sex\": \"Male\", \"birth\": \"1980-05-15\"}"
let loginResult = try jsonDecoder.decode(LoginResponse.self, from: Data(myjson.utf8))
}
catch let jsonErr{
print(jsonErr)
}
}
}
Теперь я хочу передать эти данные (внутри loginResult) в ThirdViewController.
Я полагаю, что я не могу вызвать ThirdViewController из LoginViewController, потому что TabBarController уже сделал это, и что это необходимо, если я выбираю передачу данных с использованием метода Delegate или метода NotificationCenter.
Я хочу знать, какой из параметров передачи данных между ViewControllers будет работать лучше в этом случае, потому что обычно эти методы объясняются в примерах с двумя контроллерами представления, соединенными последовательностью, но в моем случае поток экранов необычно. Благодаря.