#ios #swift #uiviewcontroller #childviewcontroller
#iOS #swift #uiviewcontroller #childviewcontroller
Вопрос:
У меня есть UIViewController, который имеет два контейнера, и каждый контейнер связан с UIViewController для некоторых конкретных функций.
Для людей, которые обесценивают мой вопрос, будет более полезно и оценено, если вы вместо этого укажете мне правильный путь.
то, что я пытаюсь сделать, это передать данные из родительского ViewController в childViewControllers
-
Я попробовал это с помощью протокола / делегата: но проблема в том, что я не смог назначить делегат childViewContainer, поскольку у него нет экземпляра от родительского.
-
Моя вторая попытка заключалась в использовании функции prepare, но она работает не так хорошо, поскольку два контейнера загружаются сразу, как только родительский загружается первым. поэтому, если значение изменено в parentViewController, я не могу передать его снова дочернему элементу.
Есть идеи, пожалуйста?
Комментарии:
1. Покажите код, в котором родитель создает эти дочерние элементы.
2. Я создал их с помощью раскадровки и использую их «alpha = 0 или alpha = 1» для переключения между ними
3. Вы проверили
Notifications
? (Я все еще считаю, что шаблон делегирования должен работать лучше, но вы действительно должны показать достаточно, чтобы я мог воспроизвести вашу точную проблему.)
Ответ №1:
После более глубокого изучения я смог найти решение для своего собственного вопроса. здесь я собираюсь опубликовать, понадобится ли это кому-либо еще в будущем
итак, прежде всего, мне нужно, чтобы он запускал childcontroller из родительского контроллера, а не из раскадровки (поэтому я удалил переход между родительским и дочерним. создайте переменную для childController следующим образом:
lazy var firstChildViewController: FirstChildViewController = {
let storynoard = UIStoryboard(name: "Main", bundle: nil)
let viewController = storynoard.instantiateViewController(identifier: "firstChild") as! FirstChildViewController
self.addChild(viewController)
self.view.addSubview(viewController.view)
return viewController
}()
то же самое для другого, если у вас два дочерних элемента
а затем в viewDidLoad:
override func viewDidLoad() {
super.viewDidLoad()
firstChildViewController.view.isHidden = false
secondChildViewController.view.isHidden = true
}
а затем в FirstChildViewController:
override func viewDidLoad() {
super.viewDidLoad()
if let parent = self.parent as? ParentViewController {
parent.delegate = self
}
}
И проблема решена, надеюсь, это кому-то поможет