Теперь я изучаю быстрое программирование и застрял в грамматике протокола.
Есть простая функция, которую я хочу реализовать: в одном Main.Storyboard я создал два ViewController. Первый ViewController имеет метку и кнопку для go для второго ViewController. Второй имеет textField и кнопку для go возврата к первому ViewController.
Я ввел несколько слов в textField и нажал кнопку go -back, чтобы закрыть вид, но не вижу, как метка изменилась в первом представлении.
Вот что я я закодировал для представления делегата:
import UIKit
protocol SecondViewDelegate {
func getText(text: String)
}
class SecondViewController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var textField: UITextField!
var text: String?
var delegate: SecondViewDelegate?
override func viewDidLoad() {
super.viewDidLoad()
textField.delegate = self
}
@IBAction func backButton(_ sender: UIButton) {
// print(text!)
delegate?.getText(text: text!)
dismiss(animated: true, completion: nil)
}
func textFieldDidEndEditing(_ textField: UITextField) {
// print("textFieldDidEndEditing has been called")
text = textField.text
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.endEditing(true)
return true
}
}
Я распечатал текст, когда нажал кнопку BackButton, и я уверен, что текст, напечатанный на консоли, - это то, что я ввел в textField.
А вот код для другого представления, в котором был показан текст:
class ViewController: UIViewController, SecondViewDelegate {
@IBOutlet weak var textLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
let secondVC = SecondViewController()
secondVC.delegate = self
}
@IBAction func clickButton(_ sender: UIButton) {
performSegue(withIdentifier: "goToSecond", sender: self)
}
func getText(text: String) {
self.textLabel.text = text
}
}
Когда я вернулся в представление, метка не изменилась. И я добавил точку останова в функцию getText и запустил приложение, приложение не взломало sh.
Я не знаю, какую часть я сделал неправильно. Кто-нибудь может указать на проблему, чтобы помочь мне? Спасибо!