首先让我说我已经尝试了解决这个问题的所有事情,我不能为我的生活弄清楚。
代码:
self.messagesControl?.showChatController()
没有运行,它在一个dismiss()闭包内,为什么后面的打印行运行,而不是上面的代码行?请帮忙!
messagesControl方法调用
var messagesControl : MessagesViewController?
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
self.dismiss(animated: true, completion: {
self.messagesControl?.showChatController()
print("dismiss closure finished running")
})
}
showChatController()
func showChatController()
{
performSegue(withIdentifier: "goToChatLogControllerPlz", sender: self)
}
预期结果 segue运行打印行执行
观察到的结果:
打印行执行。没有segue :(
修改
我已经取代:
self.messagesControl?.showChatController()
使用:
self.performSegue(withIdentifier: "showChatController", sender: self)
仍然得到相同的结果:(
答案 0 :(得分:0)
苹果解雇的方式很奇怪。您可以在演示的VC或演示者上调用它。你在这做什么?如果你在呈现的视图控制器上调用它,那么它会在关闭后离开内存,并且在任何情况下它都不应该显示下一个视图控制器;父母应该。
有三种方法可以解决这个问题:
如果只有模态的最终状态是相关的(即你不需要其他任何委托),方法1是首选的。如果您已经使用委托代替其他内容,则首选方法2。方法3是最少的代码,但除非您的父VC符合您可以调用的某些标准协议,否则它通常很差。
答案 1 :(得分:0)
您可以使用UINavigationController.popViewController(:)。
在您的封尾中添加:
TIME
关闭VC时,它将应用反向动画。
答案 2 :(得分:-1)
问题在于您正在尝试执行不再存在的View Controller
的segue。你应该做的是将segue连接到有问题的视图控制器的父节点,让父视图控制器执行segue。您的代码看起来像这样
var messagesControl : MessagesViewController?
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
dismiss(animated: true, completion: { [weak self]
self?.parent?.showChatController()
})
}
在父视图控制器
中func showChatController(){
performSegue(withIdentifier: "goToChatLogControllerPlz", sender: self)
}