Вы можете сделать это, используя уведомление / наблюдателя или шаблон делегата.
Поскольку это, похоже, отношение один к одному, вам, вероятно, следует использовать шаблон делегата, поскольку уведомление и наблюдатель используются для отношений один ко многим.
Создайте протокол прямо над кодом контроллера вашего 4-го представления. Параметрами этой функции будут данные, которые вы будете передавать из одного ViewController в другой. В этом примере я передаю текст textField, где пользователь может поставить его имя:
protocol SelectionDelegate {
func didTapChoice(name: String)
}
Добавьте переменную делегата в контроллере представления 4-й вкладки:
var selectionDelegate: SelectionDelegate!
Вызовите функцию переменной-делегата в @IBAction:
selectionDelegate.didTapChoice(name: textField.text!)
tabBarController?.selectedIndex = 0
Назначьте делегата выбора 1-му контроллеру представления в viewDidLoad () 2-го контроллера представления:
selectionDelegate = tabBarController?.viewControllers?[0] as? SelectionDelegate
Добавьте расширение внизу контроллера 1-й вкладки, реализующего функцию протокола:
extension FirstTabViewController: SelectionDelegate {
func didTapChoice(name: String) {
displayLabel.text = name
}
}
Вот результат для первого контроллера представления:
import UIKit
class FirstTabViewController: UIViewController {
@IBOutlet weak var displayLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
}
}
extension FirstTabViewController: SelectionDelegate {
func didTapChoice(name: String) {
displayLabel.text = name
}
}
Вот результат для второго контроллера представления:
import UIKit
protocol SelectionDelegate {
func didTapChoice(name: String)
}
class SecondTabViewController: UIViewController {
var selectionDelegate: SelectionDelegate!
@IBOutlet weak var textField: UITextField!
@IBAction func goToFirstTabButtonTapped(_ sender: UIButton) {
selectionDelegate.didTapChoice(name: textField.text!)
tabBarController?.selectedIndex = 0
}
override func viewDidLoad() {
super.viewDidLoad()
selectionDelegate = tabBarController?.viewControllers?[0] as? SelectionDelegate
}
}