#swift #xcode
#swift #xcode
Вопрос:
У меня есть контроллер представления, у которого есть дочерний контроллер представления, и я хочу получить доступ к этому дочернему контроллеру представления из его родительского контроллера представления.
Как я могу этого добиться?
Комментарии:
1. просто удерживайте ссылку на этот контроллер представления, если у вас нет ссылки — тогда
view.subviews.first { $0 is YourViewController }
2. @VitaliiShvetsov Извините, но я не понял!
Ответ №1:
Ответ таков… (барабанная дробь ……) … это зависит .. 🙂
NSViewController
amp; UIViewController
иметь .parent
свойство. https://developer.apple.com/documentation/uikit/uiviewcontroller/1621362-parent
https://developer.apple.com/documentation/appkit/nsviewcontroller/1434491-parent
Однако он заполняется только в том случае, если вы реализуете шаблон проектирования container-view-controller: https://developer.apple.com/library/archive/featuredarticles/ViewControllerPGforiPhoneOS/ImplementingaContainerViewController.html (многие компоненты uikit используют этот шаблон), т.Е.:
aViewController.addChild(bViewController)
bViewControler.didMove(toParent: aViewController)
bViewController.parent // is aViewController
* Примечание: вам придется самостоятельно управлять стеком представлений, это просто гарантирует, что такие вещи, как обработчики жизненного цикла / рисования / изменения размера / etc, выполняются в правильном порядке
Если вам нужно сохранить ссылку на контроллер представления (дочерний или иной), создайте свойство для дочернего элемента и установите на него ссылку или используйте дизайн container-view-controller, это очень полезно.
Приветствия
— J
Комментарии:
1. Получена эта ошибка: EXC_BAD_ACCESS (code = 2, address = 0x7ffeed03ff68)
2. @Simran Я не уверен, как вы это реализуете, но вот скриншот этого в действии. i.imgur.com/1QMpJT1.png
Ответ №2:
Есть много способов, но для простого объяснения я думаю, что этот пример будет для вас поучительным.
Предположим, что вы пытаетесь выполнить навигацию по своим viewcontrollers и используете для этого навигационный контроллер в стеке
let parentVC = UIViewController()
let childVC = UIViewController()
parentVC.navigationController?.viewControllers.append(childVC)
let childVCisHere = parentVC.navigationController?.viewControllers.first
Наконец, подумайте об аналогии, которую я установил на — GodFather — семейная иерархия
Дон Вито Корлеоне, он босс, также отец семейства parentVC
Сонни Корлеоне, он занимается грязной работой, перемещает дочерние элементы от имени семейного NavigationController
Майкл Корлеоне, он маленький братан, люди видят его в основном на экране 🙂 childVC
Комментарии:
1.Также ознакомьтесь с этими статьями, чтобы понять концепцию, в них есть полезные расширения, а также swiftbysundell.com/basics/child-view-controllers hackingwithswift.com/example-code/uikit /…
2. Я пытался, но получаю эту ошибку: EXC_BAD_ACCESS (code = 2, address = 0x7ffeed03ff68)
3. нет, вы не можете, я сделал, это работает, попробуйте внутри просмотренной загрузки, я не знаю, как ваш код, поэтому я понятия не имею, почему это произошло