Пользовательский интерфейс iOS Drawer, который работает только при вставленной точке останова - PullRequest
0 голосов
/ 11 декабря 2018

Следующее приложение Демонстрация ящика не будет работать правильно, пока я не добавлю точку останова, показанную в файле readme.Без точки останова пользовательский интерфейс не завершает заполнение, и жесты панорамирования не распознаются.С точкой останова все работает как задумано.

Приложение имеет 2 контроллера представления: родительский vc и vc выдвижного ящика, который добавляется к родительскому с помощью:

override func viewDidLoad() {
    super.viewDidLoad()
    let vc = UIStoryboard.init(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "BottomSheetViewController") as! DrawerViewController
    vc.configureDrawer(containerView: drawerContainer, overlaidView: overlaidView)
    drawerContainer.addSubview(vc.view)
}

Решение Не имеет ничего общего с точкой останова, это была просто случайность.Проблема, на которую указал @rob mayof, заключается в том, что дочерний и родительский контроллеры представления не были связаныПравильное решение отмечено ниже.Для ссылки на других людей, которые могут столкнуться с этой проблемой, правильный способ их реализации описан Apple на https://developer.apple.com/library/archive/featuredarticles/ViewControllerPGforiPhoneOS/ImplementingaContainerViewController.html.

Сноска Этот пример был разработан как попытка воспроизвести и изолировать проблемув гораздо большем проекте.Пытаясь сделать это, обнаружил это неожиданное поведение и нашел решение.

1 Ответ

0 голосов
/ 11 декабря 2018

Вот ваш код:

override func viewDidLoad() {
    super.viewDidLoad()
    let vc = UIStoryboard.init(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "BottomSheetViewController") as! DrawerViewController
    vc.configureDrawer(containerView: drawerContainer, overlaidView: overlaidView)
    drawerContainer.addSubview(vc.view)
}

(В следующий раз, пожалуйста, включите его в свой вопрос.)

Вы должны сообщить UIKit, что представление контроллера представления находится в иерархии другого контроллера представления.просматривать путем установления отношений родительского / дочернего представления контроллера.Таким образом вам нужно добавить эти строки:

override func viewDidLoad() {
    super.viewDidLoad()
    let vc = UIStoryboard.init(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "BottomSheetViewController") as! DrawerViewController
    addChildViewController(vc)  // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    vc.configureDrawer(containerView: drawerContainer, overlaidView: overlaidView)
    drawerContainer.addSubview(vc.view)
    vc.didMove(toParentViewController: self) // <<<<<<<<<<<<<<<<<<<<<<<
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...