Когда я проверил поток ваших приложений, тогда вы представляете два контроллера представления: домашняя страница представляет подробный вид и подробный вид - Объясните v c.
Но когда вы пытаетесь представить другой вид на любом уже представленном viewController тогда, может быть, вы получите ошибку.
Позвольте мне привести для этого логику c. понять код ниже и использовать в вашем приложении. может быть, это будет полезно для вас.
HomeViewController:
Override func ViewDidLoad()
{
//Add Obeserver for presenting ExplainVC.
NotificationCenter.default.addObserver(self,selector: #selector(PresentExplainVC),name: NSNotification.Name(rawValue: “presentexplainvc”),object: nil)
//Add Obeserver for presenting DetailVC.
NotificationCenter.default.addObserver(self,selector: #selector(PresentDetailVC),name: NSNotification.Name(rawValue: “presentdetailvc”),object: nil)
}
@objc func PresentExplainVC()
{
//write code for presenting your ExplainVC
}
@objc func PresentDetailVC()
{
//write code for presenting your DetailVC
}
DetailV C:
, когда вы предоставляете объяснение V C, затем используйте следующий код
self.navigationController?.dismiss(animated: true, completion: {
NotificationCenter.default.post(name: Notification.Name("presentexplainvc"), object: nil)
})
ExplainV C:
Override func ViewDidLoad()
{
NotificationCenter.default.addObserver(self,selector: #selector(PresentDetailVCFromHome),name: NSNotification.Name(rawValue: “presentdetailvcfromhome”),object: nil)
}
@objc func PresentDetailVCFromHome()
{
self.navigationController?.dismiss(animated: true, completion: {
NotificationCenter.default.post(name: Notification.Name("presentdetailvc"), object: nil)
})
}
VC1: (независимо от его списка или формы)
Override func ViewDidLoad()
{
NotificationCenter.default.addObserver(self,selector: #selector(PopviewtoexplainVC),name: NSNotification.Name(rawValue: “popviewtoexplainvc”),object: nil)
}
@objc func PopviewtoexplainVC()
{
DispatchQueue.main.asyncAfter(deadline: .now() + 1, execute: {
NotificationCenter.default.post(name: Notification.Name("presentdetailvcfromhome"), object: nil)
})
self.navigationController?.popViewController(animated: false)
}
VC2: (независимо от его списка или формы)
Override func ViewDidLoad()
{
NotificationCenter.default.addObserver(self,selector: #selector(PopviewtoVC1),name: NSNotification.Name(rawValue: “popviewtovc1”),object: nil)
}
@objc func PopviewtoVC1()
{
DispatchQueue.main.asyncAfter(deadline: .now() + 1, execute: {
NotificationCenter.default.post(name: Notification.Name("popviewtoexplainvc"), object: nil)
})
self.navigationController?.popViewController(animated: false)
}
LastV C:
Используйте приведенный ниже код для вставки в DetailV C
DispatchQueue.main.asyncAfter(deadline: .now() + 1, execute: {
NotificationCenter.default.post(name: Notification.Name("popviewtovc1"), object: nil)
})
self.navigationController?.popViewController(animated: false)