Отклонение нового UIWindow не вызывает появления viewWillAppear в базовом окне

#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. с моей точки зрения. Наблюдение за ключевым окном может быть не очень хорошей идеей, оно может быть вызвано и другими местами, когда даже вы этого не хотите.