Ios 返回到上一个ViewController,它不适用于Swift中的多个视图控制器

Ios 返回到上一个ViewController,它不适用于Swift中的多个视图控制器,ios,swift,Ios,Swift,如何以编程方式返回到上一个视图控制器?我找到了这个答案,但有一个示例演示了如果我们有导航堆栈,如何返回: self.dismissanimated:真,完成:无 如果我的控制器队列是基于导航控制器的,那么就可以了。 当我要去下一个视图控制器时,有多个视图控制器都与navigationView控制器连接,并且向后切换工作正常,但从下一个到下一个,我向后切换并卡在循环中意味着我卡在第二个和第三个视图控制器之间,而不是第一个视图控制器。在swift 3中,在按钮操作中尝试此代码 @IBAction f

如何以编程方式返回到上一个视图控制器?我找到了这个答案,但有一个示例演示了如果我们有导航堆栈,如何返回:

self.dismissanimated:真,完成:无

如果我的控制器队列是基于导航控制器的,那么就可以了。
当我要去下一个视图控制器时,有多个视图控制器都与navigationView控制器连接,并且向后切换工作正常,但从下一个到下一个,我向后切换并卡在循环中意味着我卡在第二个和第三个视图控制器之间,而不是第一个视图控制器。

在swift 3中,在按钮操作中尝试此代码

@IBAction func btnBackClick(_ sender: UIButton) {
       _ = navigationController?.popViewController(animated: true) 
    }
在导航堆栈a->B->C中

将1个控制器移回BPop-PreviousViewcontroller

弹出到根视图控制器

弹出到特定的Viewcontroller

不要使用“驳回”。从A到B使用navigationcontroller.pushviewcontroller,从B到C使用presentviewcontroller。
然后,C控制器的“后退”按钮使用dismissViewcontroller,B控制器的“后退”按钮使用popViewController。

对于Swift 3.0,您可以使用以下命令:-

如果要支持rootviewcontroller,请使用以下命令

        _ = self.navigationController?.popToRootViewController(animated: true)
或者,如果您想返回添加到堆栈上的另一个视图控制器:-

 for obj in (self.navigationController?.viewControllers)! {
        if obj is TargetVC {
        _ =    self.navigationController?.popToViewController(obj, animated: true)
            break
        }
    }
试试这个:- //用于移动到上一屏幕

self.navigationController?.popViewController(animated: true)
//用于移动到根视图控制器!这将清除//导航堆栈

 self.navigationController?.popToRootViewController(animated: true)
//要移动到特定的视图控制器,例如:-TargetVC

for obj in (self.navigationController?.viewControllers)! {
        if obj is TargetVC {
 self.navigationController?.popToViewController(obj, animated: true)
            break
        }
    }

你需要使用这个,你能告诉我如何使用这个吗?popViewController方法的工作原理是从导航控制器维护的所有ViewController堆栈中返回一个VC。假设:应用程序A、B、C中有3个VC。A转到B,B转到C。现在需要调用self.navigationcontroller.popviewcontrolleranimatedanimated:true返回一个VC。从C转到B,从B回到A。请分享您的代码,让其他人了解您面临的问题。@praveensrivastava-您的问题不太清楚。。。你是否在使用UINavigationController?实际上,目前我正在使用self.dismissanimated:true,completion:nil,从B到a工作正常,但当执行c到B,然后B到a时,会将我发送回c。我不知道为什么。你想检查什么?请明确指定。当您在其他控制器上显示控制器时,请关闭。当您在导航堆栈中推送控制器时,Pop工作。两者都不同。你想用哪一个?我认为对于您的用例,Push/Pop可以很好地工作。导航堆栈仅用于导航控制器。它维护着所有被推送的控制器的堆栈。我不明白你想要传达什么。
        _ = self.navigationController?.popToRootViewController(animated: true)
 for obj in (self.navigationController?.viewControllers)! {
        if obj is TargetVC {
        _ =    self.navigationController?.popToViewController(obj, animated: true)
            break
        }
    }
self.navigationController?.popViewController(animated: true)
 self.navigationController?.popToRootViewController(animated: true)
for obj in (self.navigationController?.viewControllers)! {
        if obj is TargetVC {
 self.navigationController?.popToViewController(obj, animated: true)
            break
        }
    }