2016-10-28 9 views
1

AppDelegateで次のコードを使用して、ボタンが選択されたときにアプリケーション内にポップアップウィンドウを表示しています。これを最終的にラベルハイパーリンクに移動します。ウィンドウ階層に表示されていないビューを表示しようとしました

let storyboard = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("test") as! ViewController 
    let popOverVC = UIStoryboard(name:"Main", bundle: nil).instantiateViewControllerWithIdentifier("sbPopUpID") as! PopUpViewController 
    storyboard.addChildViewController(popOverVC) 
    popOverVC.view.frame = storyboard.view.frame 
    storyboard.view.addSubview(popOverVC.view) 
    popOverVC.didMoveToParentViewController(storyboard) 
    self.window?.rootViewController?.presentViewController(storyboard, animated: true, completion: nil) 

私はこれが正常に動作するボタンを選択するには、最初の時間は、しかし、それ以降のすべてのボタンに次のエラーが表示されます押しました。

2016-10-28 11:27:40.551 testfordeeplinks[20496:104536] Warning: Attempt to present on whose view is not in the window hierarchy!

答えて

0

は、現在表示されているビューコントローラを必ずしも参照しているとは限りません。たとえば、UINavigationControllerを使用している場合、rootViewControllerはそのナビゲーションコントローラへの参照を保持し、それ自体がビュー階層の深い部分に埋め込まれているため、ビューコントローラを表示しようとするとエラーが発生します。私がやってお勧めするのは、最後のビューコントローラをつかんで、navController.viewControllersでポップアップを表示することです。次のコードを参照してください:

let appDel = UIApplication.sharedApplication().delegate as! AppDelegate 
if let navController = appDel.keyWindow?.rootViewController as? UINavigationController { 
    if let visibleVC = navController.viewControllers.last { 
     visibleVC.presentViewController(storyboard, animated: true, completion: nil) 
    } 
} 

私に教えてください。 :)

+0

おかげヤコブ、これは次のエラーを返します。あなたが使用することを意味した「のUIViewController」から ダウンキャストは、optionalsをアンラップ「!」? – ScoopMatt

+0

エラーが表示されないので、貼り付けるのを忘れてしまったと思いますか? :P –

+0

"UIViewController"からのダウンストリームは、オプションをアンラップするだけで、 '!'を使用するのですか? – ScoopMatt

3

将来この問題を抱える人にとって、これは私が解決した方法です。

let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
    appDelegate.window?.rootViewController = storyboard 
関連する問題