2016-08-26 5 views
0

私はおそらく既に答えられているが、私はそれを見つけることができないだろうという質問があります。ウィンドウの階層ios

私はいくつかのWebサービスを呼び出すビューを持っています。結果が戻ったら、別のビューを開いて結果を表示したいと思います。 WSへの呼び出しの直後に、そのウィンドウを閉じます。

今私の問題は、私は

UIApplication.sharedApplication().keyWindow?.visibleViewController!.presentViewController or 
UIApplication.sharedApplication().keyWindow?.visibleViewController!.childViewControllers[0].presentViewController 

でpresentViewControllerでそれを開こうとすると、私はrootViewControlerにアクセスする場合と同じであることです。

ビューが既にviewWillDisappearを呼び出して以来、階層内に存在しないというエラーが表示されます。

現在のトップビューに関係なく、すべてのビューでビューを表示する方法はありますか?

編集:

解決策は本当に醜いと愚かだった。 viewDidApearがそのビューに呼び出されるたびに変更される静的変数があります。この方法で私は最後のビューを表示します。私はこれが良い方法ではない、あるいは安全な方法ではないことを知っていますが、他のアイデアはありません。

+0

を使用して

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // do some background task dispatch_async(dispatch_get_main_queue(), ^{ // update UI here // navigate your view controllers let vc: UIViewController = (self.storyboard?.instantiateViewControllerWithIdentifier("viewContIdentifire"))! self.presentViewController(vc, animated: true, completion: nil) // **OR** self.navigationController?.pushViewController(vc, animated: true) }); ); 

より便利な方法で戻ってVCへの移動は、plzはいくつかのより多くのコードを示しています。 – Shoaib

答えて

0

はい、ViewControllerを別のものの上に表示する方法がありますが、これはあなたのウィンドウには全く触れないでください。あなたのビューコントローラクラスで はあなたの呼び出しは、呼び出し

let viewController = ViewController() //change this to your view controller class that you want to present 
self.presentViewController(viewController, animated: true, completion: nil) 
+0

これは正常に動作しますが、問題はUIViewControllerではないので、アプリケーションのトップビューを取得する必要があるということです。 – schmru

0

コールWebサービスを完了し、コードの下に使用して、メインスレッドであなたのビューコントローラを操作した直後。

// using this navigate your app to root view of ui stack 
self.navigationController?.popToRootViewControllerAnimated(true) 

// using this line of code navigate to any view   
self.navigationController?.popToViewController(viewContName, animated: true) 

// this navigate back to last view 
self.navigationController?.popViewControllerAnimated(true) 
+0

問題は、私が別のnavigationControllersで作業していて、何人かで最後に開いたビューを見つけなければならない場合があるということです。 – schmru

+0

'self.navigationController?.pushViewController(vc、animated:true)'を使用すると、バックオプションが表示されます。 – vaibhav

+0

ちょうど私があなたがナビゲートする方法を理解して投稿した上記のコードで適用されます。 – vaibhav