Могу ли я использовать dismiss для перемещения по экрану с помощью NavigationController?

#ios #swift

#iOS #swift

Вопрос:

Я использую NavigationController для управления представлением.

Если значение превышено в первом представлении и значение не удовлетворяет «если» во втором представлении, я надеюсь, что «отклонение» сработает.

Я привел аналогичный простой пример.

 //First View
class ViewController: UIViewController {
    
    @IBAction func goSecond(_ sender: Any) {
        let Storyboard = UIStoryboard(name: "Main", bundle: nil)
        let DvC = Storyboard.instantiateViewController(withIdentifier: "SecondViewController") as! SecondViewController
        
        self.navigationController?.pushViewController(DvC, animated: true)
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        
    }
}
  
 //Second View
class SecondViewController: UIViewController {
    
    @IBAction func goThird(_ sender: Any) {
        let Storyboard = UIStoryboard(name: "Main", bundle: nil)
        let DvC = Storyboard.instantiateViewController(withIdentifier: "ThirdViewController") as! ThirdViewController
            
        let num = 1
        DvC.num = num
            
        self.navigationController?.pushViewController(DvC, animated: true)
    }


    override func viewDidLoad() {
        super.viewDidLoad()
        
    }
}
  
 //Third View
class ThirdViewController: UIViewController {
    
    var num = Int()

    override func viewDidLoad() {
        super.viewDidLoad()
        print("num: ")
        print(num)

        if(num != 2) {
            print("Success")
//            dismiss(animated: true, completion: nil)
//            navigationController?.dismiss(animated: true, completion: nil)
        } else {
            print("Failed")
        }
    }
}
  

Третье представление показывает «Успех», но коды под ним не работают.

 dismiss(animated: true, completion: nil) // not work
navigationController?.dismiss(animated: true, completion: nil) // not work
  

Нажатие кнопки на первом представлении переходит ко второму представлению, а нажатие кнопки на втором представлении переходит к третьему представлению.

Если значение, переданное при переходе к третьему просмотру, не удовлетворяет «если», я хочу вернуться к первому просмотру.

Я хочу, чтобы завершались второй и третий просмотры, а не только сдвиг экрана.

Как у finish() Android.

Как я могу выйти из второго и третьего представлений и вернуться к первому представлению?

Ответ №1:

Вы помещаете контроллеры просмотра в стек. dismiss предназначен для отклонения VCS, представленных модально.

Что вы хотите сделать, это открыть VC, чтобы вернуться на один.

         navigationController?.popViewController(animated: true)
  

или вернуться к корневому представлению.

         navigationController?.popToRootViewController(animated: true)