web-dev-qa-db-ja.com

UIWindowを削除する方法?

[myWindow resignKeyWindow][self.window makeKeyAndVisible]のように簡単だと思いましたが、私はそうは思いません…どうすればいいですか?

ありがとう:)

32
G33kz0r

-resignKeyWindowを直接呼び出さないでください。UIWindowsが削除されたときにいくつかのコードを実行するようにオーバーライドすることを目的としています。古いウィンドウを削除するには、UIWindowの新しいインスタンスを作成してそれを-makeKeyAndVisibleにする必要があります。古いウィンドウはそのキーステータスを再署名します。 iOS 4では、参照がない場合、古いIWindowもガベージコレクションされます。 iOS 3.xでこれを行うと、悲惨な影響があります。警告しました。

15
bioffe

ウィンドウを非表示にする正しい方法は、hiddenプロパティをYESに設定することです。 UIApplicationのwindowsプロパティから削除するには、ウィンドウを解放するだけです(ARCでは、すべての参照をnilに設定します)。

もちろん、この時点で別のウィンドウを用意する必要があります。

79
Nikolai Ruhe

アプリウィンドウ以外のウィンドウがある場合は、それを使用してください。

let mainWindow = UIApplication.shared.delegate?.window
mainWindow??.makeKeyAndVisible()
0
Avinash

アプリデリゲートからウィンドウを削除することはできません。ただし、作成したカスタムウィンドウは削除できます。

ウィンドウを削除するには、まず交換品を提供する必要があります。したがって、デフォルトのウィンドウを取得します。

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

これで、アプリデリゲートのwindowプロパティを介してデフォルトウィンドウにアクセスできます。

次に、オリジナルまたはカスタムのナビゲーションコントローラーを取得します。 rootViewControllerに自分自身を割り当てます。

makeKeyandVisibleを呼び出すと、ウィンドウが削除され、アプリデリゲートのウィンドウがキーウィンドウとして割り当てられます。 rootViewControllerを先ほど作成したナビゲーションコントローラに設定すれば、準備完了です。

DEMONavigationController *demoNav = [[DEMONavigationController alloc]initWithRootViewController:self];
[appDelegate.window makeKeyAndVisible];
appDelegate.window.rootViewController = demoNav;
0