在Swift上弹出ViewController

erd*_*mgc 37 uinavigationcontroller ios swift

我需要从导航控制器弹出一个UIViewController.

只需编写这行代码,但要做一个例外;

在展开Optional值时意外地发现了nil

self.navigationController.popViewControllerAnimated(true)
Run Code Online (Sandbox Code Playgroud)

如果我使导航控制器可选,此行不起作用,不弹出

self.navigationController?.popViewControllerAnimated(true)
Run Code Online (Sandbox Code Playgroud)

怎么解决?

kar*_*ofk 85

您需要正确地解开您的navigationController

if let navController = self.navigationController {
    navController.popViewController(animated: true)
}
Run Code Online (Sandbox Code Playgroud)

  • 这基本上与可选链接具有相同的效果; 它是有效的,如果它不是零,如果它不做任何事情. (21认同)
  • 这与问题的有效代码没有什么不同. (4认同)

Ani*_*mar 19

Swift 3.0这对我有用

_ = self.navigationController?.popViewController(animated:true)

在此输入图像描述

  • 这里不需要`_ =` (3认同)

spa*_*key 7

在我的情况下我使用主详细信息视图(拆分视图控制器).我的详细信息视图控制器嵌入在导航控制器中.所以,当我想解雇我的详细信息视图控制器.我不得不从父控件(Split视图控制器)的导航控制器中弹出它.

_ = self.navigationController?.navigationController?.popViewController(animated: true)
Run Code Online (Sandbox Code Playgroud)

希望这有助于某人.


Ale*_*erg 6

您正在使用的视图控制器似乎未嵌入导航控制器中.如果有一个导航控制器,即self.navigationController不是nil,那么两条线应该也能正常工作,即使后者是优选的,因为它使用可选的链接.

确保已将View Controller嵌入导航控制器中.您可以通过在Storyboard编辑器中选择View Controller并单击Editor - > Embed In - > Navigation Controller来完成此操作.还要确保您的Storyboard入口点(指示首先显示哪个视图控制器的箭头)指向导航控制器或之前.