[myWindow resignKeyWindow]
や[self.window makeKeyAndVisible]
のように簡単だと思いましたが、私はそうは思いません…どうすればいいですか?
ありがとう:)
-resignKeyWindow
を直接呼び出さないでください。UIWindowsが削除されたときにいくつかのコードを実行するようにオーバーライドすることを目的としています。古いウィンドウを削除するには、UIWindowの新しいインスタンスを作成してそれを-makeKeyAndVisible
にする必要があります。古いウィンドウはそのキーステータスを再署名します。 iOS 4では、参照がない場合、古いIWindowもガベージコレクションされます。 iOS 3.xでこれを行うと、悲惨な影響があります。警告しました。
ウィンドウを非表示にする正しい方法は、hidden
プロパティをYESに設定することです。 UIApplicationのwindows
プロパティから削除するには、ウィンドウを解放するだけです(ARCでは、すべての参照をnilに設定します)。
もちろん、この時点で別のウィンドウを用意する必要があります。
アプリウィンドウ以外のウィンドウがある場合は、それを使用してください。
let mainWindow = UIApplication.shared.delegate?.window
mainWindow??.makeKeyAndVisible()
アプリデリゲートからウィンドウを削除することはできません。ただし、作成したカスタムウィンドウは削除できます。
ウィンドウを削除するには、まず交換品を提供する必要があります。したがって、デフォルトのウィンドウを取得します。
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
これで、アプリデリゲートのwindow
プロパティを介してデフォルトウィンドウにアクセスできます。
次に、オリジナルまたはカスタムのナビゲーションコントローラーを取得します。 rootViewController
に自分自身を割り当てます。
makeKeyandVisible
を呼び出すと、ウィンドウが削除され、アプリデリゲートのウィンドウがキーウィンドウとして割り当てられます。 rootViewControllerを先ほど作成したナビゲーションコントローラに設定すれば、準備完了です。
DEMONavigationController *demoNav = [[DEMONavigationController alloc]initWithRootViewController:self];
[appDelegate.window makeKeyAndVisible];
appDelegate.window.rootViewController = demoNav;