我有RootVC:UITableViewController,其中包含密码列表。当我单击密码时,它们将在ViewPasswordVC中打开。当我单击“编辑”密码时,在EditPasswordVC中打开。当我在EditPasswordVC中单击“取消”或“保存”时,我只后退一步,但我想返回到RootVC。 (VC = View Controller)
在这里您可以看到我的问题:
当我在didSelectRowAt中单击RootVC上的密码时,这是代码:
let viewPasswordVC = ViewPasswordVC()
self.navigationController?.pushViewController(viewPasswordVC, animated: true)
当我单击密码中的“编辑”时,这是代码:
let editPasswordVC = EditPasswordVC()
let navigationController = UINavigationController(rootViewController: editPasswordVC)
self.present(navigationController, animated: true, completion: nil)
这是当我在EditPasswordVC中时单击“取消”时的代码(与我单击保存时相同):
dismiss(animated: true, completion: nil)
我该如何解决?我想在EditPasswordVC中单击“取消”或“保存”时,让我回到RootVC而不是ViewPasswordVC。
谢谢
答案 0 :(得分:1)
您实际上是在解雇当前的ViewController,但是先前的ViewController不是第一个,因此您不能期望自己进入RootVC
。您必须声明解雇EditPasswordVC
时应执行的操作,以实现此操作,请按照以下步骤操作:
首先为EditPasswordVC
创建委托协议
protocol EditPasswordVCDelegate {
func editDidEnd()
}
然后在EditPasswordVC
中为代理创建变量
var delegate: EditPasswordVCDelegate?
下一步将这个协议实现为ViewPasswordVC
class ViewPasswordVC: UIViewController, EditPasswordVCDelegate
然后在您提出editPasswordVC
之前将其代表设置为自我
let editPasswordVC = EditPasswordVC()
editPasswordVC.delegate = self
现在ViewPasswordVC
中的声明声明您要在编辑结束时转到根目录。因此,添加EditPasswordVCDelegate
委托方法
func editDidEnd() {
navigationController?.popToRootViewController(animated: true)
}
现在声明EditPasswordVC
消失时应该怎么办。您想在委托上调用方法
override func viewDidDisappear(_ animated: Bool) {
delegate?.editDidEnd()
}
现在您可以打电话
dismiss(animated: true, completion: nil)