2017-08-06 7 views
1
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    dismiss(animated: true) { 
     let viewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ChatPage") 
     self.present(viewController, animated: true, completion: nil) 

     print("111") 

    } 
} 

つのビューコントローラを却下し、completionblock
によって別のViewControllerに移動させながら、エラーを取得して、この問題を解決するために私を助けてください、私はサイトを参照しますが、まだIここにはまった。MessagePeopleTableViewController:0x7fb47dd44f80>は、ビューではありませんウィンドウ階層内

+0

例を参照してください。https://stackoverflow.com/questions/26022756/warning-attempt-to-present-on-whose-view-is-not-in-the-window-hierarchy-s –

答えて

1

すでに閉じられている現在のコントローラから「ChatPage」コントローラを表示するようです。これが理由だと思います。

現在のコントローラがモーダルである場合、あなたはこのような何か試すことができます。

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
      dismiss(animated: true) { 

     let viewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ChatPage")  

     //get access to presenting parent controller 
     self.presentingViewController.present(viewController, animated: true, completion: nil) 

     print("111") 

    } 
} 

または現在のコントローラで親コントローラのインスタンスを保存するが、これは実際には良いコードではありません。

これがうまくいかない場合、もう1つの方法は、親コントローラ内の何らかのメソッドを呼び出すデリゲートを使用して何かを提示することです。これは、新しいコントローラ(あなたの場合は親コントローラだと思います)を表示するコントローラからself.present(viewController、animated:true、completion:nil)を呼び出す必要があることを意味しますが、コントローラからは除外されません。

関連する問題