Как удалить UIWindow? - PullRequest
       8

Как удалить UIWindow?

28 голосов
/ 28 декабря 2010

Я думал, что это легко, как [myWindow resignKeyWindow] и [self.window makeKeyAndVisible], но я думаю, что нет ... Ребята, знаете, что делать?

Спасибо :)) 1005 *

Ответы [ 5 ]

74 голосов
/ 18 января 2013

Правильный способ скрыть окно - установить для свойства hidden значение YES.Чтобы удалить его из свойства windows в UIApplication, вы просто отпускаете окно (в ARC вы устанавливаете все ссылки на nil).

Конечно, вы хотели бы, чтобы в это время было еще одно окно.

15 голосов
/ 27 февраля 2011

Не вызывайте -resignKeyWindow напрямую, он должен был быть переопределен для выполнения некоторого кода при удалении ваших UIWindows.Чтобы удалить старое окно, вам нужно создать новый экземпляр UIWindow и сделать его -makeKeyAndVisible, старое окно подаст свой статус ключа.В iOS 4 он даже будет собирать ваш старый UIWindow , если у вас нет ссылок на него.Выполнение этого в iOS 3.x имело бы катастрофические последствия.Предупрежден Я.

0 голосов
/ 19 января 2018

Если у вас есть любое окно, кроме окна приложения, используйте его ..

let mainWindow = UIApplication.shared.delegate?.window
mainWindow??.makeKeyAndVisible()
0 голосов
/ 01 июля 2016

Вы не можете удалить окно из делегата приложения.Однако вы можете удалить любые созданные окна.

Чтобы удалить окно, вы должны сначала предоставить замену.Итак, мы получаем окно по умолчанию.

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];

Теперь у нас есть доступ к окну по умолчанию через свойство window делегата приложения.

Теперь получите оригинальный или пользовательский контроллер навигации.Назначьте себя для rootViewController.

Вызов makeKeyandVisible удаляет все окна и назначает окно делегата приложения в качестве ключевого окна.Установите rootViewController для контроллера навигации, который вы только что создали, и все готово!

DEMONavigationController *demoNav = [[DEMONavigationController alloc]initWithRootViewController:self];
[appDelegate.window makeKeyAndVisible];
appDelegate.window.rootViewController = demoNav;
0 голосов
/ 08 января 2013

У меня та же проблема, она может помочь.

Вам нужно уничтожить все сильные ссылки перед удалением и освобождением окон, особенно rootWindowController.Я думаю, что ниже кода достаточно, чтобы удалить любое окно:

[self.window.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
self.window.rootViewController = nil;
[self.window resignKeyWindow];
[self.window removeFromSuperview];
...