Я пытаюсь впервые установить связь между контроллерами, используя делегирование.
У меня есть FirstViewController, который запускает FooTwoViewController через несколько секунд, затем FooTwoViewController отправляет некоторую строку обратно в вызывающий контроллер.
Я реализовал это, но обнаружил, что мой метод делегата не вызывается ИЛИ Я неправильно его реализую.
Пожалуйста, смотрите мой код ниже:
import UIKit
protocol FooTwoViewControllerDelegate:class {
func myVCDidFinish(_ controller: FooTwoViewController, text: String)
}
class FirstViewController: UIViewController, FooTwoViewControllerDelegate {
var textRecieved = ""
override func viewDidLoad() {
super.viewDidLoad()
// This launches FooTwoViewController after 2 seconds
DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let secondViewController =
storyBoard.instantiateViewController(withIdentifier: "FooTwoViewController") as! FooTwoViewController
self.present(secondViewController, animated: true, completion: nil)
}
}
func myVCDidFinish(_ controller: FooTwoViewController, text: String) {
// THIS DOES NOT PRINT, WHAT AM I MISSING?
print("Data received: \(text)")
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "mySegue" {
let vc = segue.destination as! FooTwoViewController
vc.delegate = self
}
}
}
Мой FooTwoViewController ниже:
import UIKit
class FooTwoViewController: UIViewController {
weak var delegate: FooTwoViewControllerDelegate?
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func ClickMe(_ sender: Any) {
delegate?.myVCDidFinish(self, text: "hey!") //assuming the delegate is assigned otherwise error
self.dismiss(animated: true, completion: nil)
}
}
Мой метод myVCDidFinish не вызывается, пожалуйста, я что-то упустил?