Ошибка при переходе обратно на заданный c экран в iOS - PullRequest
1 голос
/ 02 марта 2020

У меня немного сложный сценарий для вызова нескольких экранов и возврата к указанному c экрану в пользовательском интерфейсе моего приложения. У меня есть homeV C, который вставляется в контроллер навигации, когда пользователь нажимает homeV C, и на нем появляется еще один экран, называемый detailV C. Это иерархия экранов вызова enter image description here

После отправки API в LastV C я хочу напрямую перейти к экрану DetailV C, я пробовал несколько способов, но мое приложение застрять. Я пытался,

Unwind Segue

С помощью этого кода я перехожу к HomeV C, но он также застревает,

self.view.window!.rootViewController?.dismiss(animated: false, completion: nil)

Основная проблема заключается в том, что приложение застревает и в нем ничего не работает. Как я могу добиться этого, я перепробовал много решений, но не смог сделать это.

1 Ответ

3 голосов
/ 02 марта 2020

Когда я проверил поток ваших приложений, тогда вы представляете два контроллера представления: домашняя страница представляет подробный вид и подробный вид - Объясните 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)
...