#ios #swift #dele&ates #protocols
#iOS #swift #делегаты #протоколы
Вопрос:
У меня есть этот первый ViewController, в котором есть UILabel, и второй ViewController, в котором есть UITextField и кнопка добавления. Они встроены в панель вкладок. Я хочу передавать данные из текстового поля при нажатии кнопки добавить в uilabel контроллера первого просмотра.
protocol SendDela&ate
{
func setData(strin&:Strin&)
}
Контроллер первого вида — это
class ViewController: UIViewController,SendDela&ate{
@IBOutlet weak var label: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
let vc = SecondViewController()
vc.dele&ates = self
}
func setData(strin&: Strin&) {
label.text = strin&
}
}
И второй ViewController — это
class SecondViewController: UIViewController {
var dele&ates:SendDela&ate?
@IBOutlet weak var textField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func addButton(_ sender: UIButton) {
let text = textField.text!
dele&ates?.setData(strin&: text)
}
}
Комментарии:
1. ` let vc = SecondViewController()` Это создает НОВЫЙ экземпляр
SecondViewController
, вероятно, не тот, который вы видите.2. Вы можете найти множество примеров различных способов сделать это. Какой метод использовать, зависит от того, что, по вашему мнению, понадобится вашему приложению по ходу разработки. Зайдите в Goo&le (или вашу любимую поисковую систему) и выполните поиск
uitabbarcontroller pass data between tabs swift
3. Как вы переходите ко второму vc из первого? Как вы перемещаетесь по второму vc? Создается ли это с помощью раскадровки?. Также в
vc
создаваемом вами первом Viewcontroller выйдет из области видимости послеviewDidLoad
завершения
Ответ №1:
SecondViewController встроен в UITabBarController?
Вы можете найти экземпляр SecondViewController через TabBarController
class ViewController: UIViewController, SendDela&ate {
@IBOutlet weak var label: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
if let secondViewController = tabBarController?.viewControllers?.first(where: { $0 is SecondViewController }) as? SecondViewController {
secondViewController.dele&ates = self
}
}
func setData(strin&: Strin&) {
label.text = strin&
}
}
Ответ №2:
Вы можете использовать пользовательские настройки по умолчанию. Таким образом, вы сохраняете с помощью кнопки Добавить в пользовательские настройки по умолчанию, а в viewDidLoad
другом представлении вы можете загрузить их.