(Swift) возвращаясь к навигационному контроллеру - PullRequest
1 голос
/ 12 февраля 2020

Я опишу, что я хочу сделать. У меня есть 3 viewControllers. Первый должен быть навигационным, и я думаю, что я допустил ошибку в коде.
Первый V C ведет ко Второму, а второй V C ведет к Третьему V C. Третий имеет получил кнопку, которая должна привести к первой.

Вот так я представляю secondV C от первогоV * ​​1024 *:

let mainStoryboard = UIStoryboard(name: "Main", bundle: Bundle.main)
let secondVC = (mainStoryboard.instantiateViewController(withIdentifier: "SecondViewController") as! SecondViewController)   
presentVC(SecondVC)

func presentVC(_ VC: UIViewController) {
        let navController = UINavigationController(rootViewController: VC)
        navController.modalPresentationStyle = .fullScreen
        self.navigationController?.present(navController, animated: true, completion: nil)
    }

Теперь во втором V C, когда я нажимаю Close справа navBarItem, третий V C должен быть открыт, и он работает нормально, вот код:

В ViewDidLoad:

 self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Close", style: .plain, target: self, action:
#selector(closeSecondVC))

И после:

  @objc
    func closeSecondVC() {
    let mainStoryboard = UIStoryboard(name: "Main", bundle: Bundle.main)
            let thirdVC = (mainStoryboard.instantiateViewController(withIdentifier: "ThirdViewController") as! ThirdViewController)
            presentVC(thirdVC) //Same function as above.
}

И на эту кнопку кликните в третьем V C, мне нужно вернуться к первому V C, вот где я теряюсь:

 @IBAction func btnTapped(_ sender: Any) {
        if let navController = self.navigationController {
            navController.popViewController(animated: true)
        }  //nothing happens on click
    }

Ответы [ 4 ]

2 голосов
/ 12 февраля 2020

Используйте приведенный ниже код в btnTapped:

    for controller in self.navigationController!.viewControllers as Array 
    {
      // here YourViewController is your firstVC      
     if controller.isKind(of: YourViewController.self) {
            self.navigationController!.popToViewController(controller, animated: true)
            break
        }
    }

И не представляйте свой взгляд pu sh Ваш взгляд для всплывающего окна.

1 голос
/ 12 февраля 2020

Когда вы представляете любой контроллер представления, вам нужно отклонить его вместо pop! Когда вы нажимаете какой-либо контроллер вида в это время, вы можете выскочить, но здесь вы представляете контроллер вида, в этом случае вы должны отклонить его, как показано ниже,

dismiss(animated: true) {

    }

, или вы должны добавить sh новый вид контроллер, а затем вы можете получить его!

0 голосов
/ 12 февраля 2020

Вам нужно вызвать это, чтобы вернуться к первому ViewController:

self.navigationController?.popToRootViewController(animated: true)
0 голосов
/ 12 февраля 2020

Вы представляете навигационный контроллер, navController.popViewController() не будет работать.

Попробуйте выполнить sh навигацию, используя

self.navigationController?.pushViewController(vc, animated: true)

Теперь, если вы хотите go из ViewController3 до ViewController1 попробуйте

for controller in self.navigationController!.viewControllers as Array {
    if !controller.isKind(of: ViewController1.self) {
        self.navigationController!.popToViewController(controller, animated: true)
    } 
 else{
     break;
  }
}
...