2010-12-28 20 views
27

私はそれが[myWindow resignKeyWindow][self.window makeKeyAndVisible]のように簡単だと思っていましたが、私はそうは思わない...あなたは何をすべきか知っていますか?UIWindowを削除するには?

感謝:)

+0

あなたはもう少しあなたが何であるかを点で最大手の込んだ/説明できますか?質問があまりにも明確ではないので。私は間違っているかもしれません。 –

答えて

13

は、それがあなたのUIWindowsが削除されるとき、いくつかのコードを実行するために上書きされることを意図して、直接-resignKeyWindowを起動しないでください。古いウィンドウを削除するには、UIWindowの新しいインスタンスを作成してそれを-makeKeyAndVisibleにする必要があります。古いウィンドウはキーステータスを辞退します。 iOS 4では、参照先がない場合は、古いUIWindowをガベージコレクションすることさえあります。これをiOS 3.xで行うと、悲惨な結果になります。後で警告した。

+5

これは実際にどのウィンドウがkeyWindowであるかを変更しますが、application.windows ....から削除しているようには見えません。 – samvermette

+0

カスタムウィンドウのスーパービューはnullです。ちょうどそれがNO – tristan

+0

に隠されているこれを下の答え(Nikolai Ruheから)実際に窓を取り除く方法を教えてください –

-8

私は同じ問題を抱えている可能性があります。

Windows、特にrootWindowControllerを削除して解除する前に、すべての強力な参照を破棄する必要があります。私は、コードの下に任意のウィンドウを削除するのに十分であると思う:

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

他の投稿のいくつかで述べたように、あなたは 'resignKeyWindow'を直接呼び出すべきではありません。 – ThomasW

64

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

もちろん、この時点で別のウィンドウを用意したいと思うでしょう。

+3

ARCでnilを私のために働かせました。 – NightFury

+0

これは実際の正しい方法です。 – Leo

0

App Delegateからウィンドウを削除することはできません。ただし、作成されたカスタムウィンドウはすべて削除できます。

ウィンドウを削除するには、まず置換えを行う必要があります。そこで、デフォルトのウィンドウを取得します。

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

これで、appdelegate.windowプロパティでデフォルトのウィンドウにアクセスできるようになりました。

元のカスタムナビゲーションコントローラを入手してください。自己をrootviewcontrollerとして割り当てます。

makekeyandvisibleを呼び出すと、すべてのウィンドウが削除され、appdelegatesウィンドウがキーウィンドウとして割り当てられます。あなたが作成したNavigationControllerとしてrootViewControllerを設定して、あなたは行き​​たい!

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

ありがとうございます!

0

アプリのウィンドウ以外のウィンドウを持っている場合は、それを使用...

let mainWindow = UIApplication.shared.delegate?.window 
mainWindow??.makeKeyAndVisible() 
関連する問題