#ios #swift #xcode
#iOS #swift #xcode
Вопрос:
В моем текущем проекте у меня есть RootViewcontroller
представление a navigation controller
, содержащее a HolidayViewController
. Это HolidayViewController
вызывает функцию, которая создает НОВОЕ окно, чтобы пользователь мог войти в другую службу. После успешного входа в систему НОВОЕ окно закрывается с помощью следующего кода (из НОВОГО окна RootViewController):
ПРИМЕЧАНИЕ: base
будучи HolidayViewController.view.window
rootViewController?.dismiss(animated: true, completion: {
if self.isKeyWindow || base.isKeyWindow {
base.makeKeyAndVisible()
}
windowLevel = UIWindow.Level(-1)
})
Все выглядит нормально, за исключением того, что HolidayViewController
viewWillAppear
оно не вызывается при закрытии НОВОГО окна.
Я мог бы использовать NotificationCenter
или completion
блок для принудительного выполнения действия, но я не хочу этого делать, поскольку я хотел бы, чтобы мое НОВОЕ окно было более общим и фактически использовало обычную цепочку событий iOS.
Это нормально? Есть ли способ заставить его работать нормально?
Ответ №1:
если НОВОЕ окно представлено как модальное, то отклонение НОВОГО окна не вызовет viewwillappear из HolidayViewController. Потому что HolidayViewController уже находится в иерархии представлений и виден в НОВОМ окне. Вы можете использовать делегирование для вызова методов HolidayViewController при закрытии вашего НОВОГО окна.
Комментарии:
1. Я думаю о решении для наблюдения за окном. isKeyWindow, но пока это не срабатывает.
2. с моей точки зрения. Наблюдение за ключевым окном может быть не очень хорошей идеей, оно может быть вызвано и другими местами, когда даже вы этого не хотите.