2017-08-06 69 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
请帮我解决这个问题,我提到的网站,但我仍卡在这里了。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") 

    } 
} 

或保存父控制器比如在电流控制器,但是这是不好的代码实际上。

如果这不起作用,另一种方法是使用委托,它将调用父控制器中的某种方法来呈现某些内容。这意味着你应该从控制器调用self.present(viewController,animated:true,completion:nil),该控制器应该提供一个新的控制器(在你的情况下,它是父控制器,我猜),但不是来自将被解雇的控制器

相关问题