Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何在另一个视图控制器后面显示视图控制器?_Objective C_Swift3_Uinavigationcontroller_Segue_Uistoryboard - Fatal编程技术网

Objective c 如何在另一个视图控制器后面显示视图控制器?

Objective c 如何在另一个视图控制器后面显示视图控制器?,objective-c,swift3,uinavigationcontroller,segue,uistoryboard,Objective C,Swift3,Uinavigationcontroller,Segue,Uistoryboard,我试图介绍两个视图控制器。我尽量避免一个接一个地展示,因为这并不能提供良好的用户体验 我正在使用故事板/分段来显示视图控制器,每个视图控制器都嵌入到导航控制器中 行为应该是: 视图控制器1显示视图控制器2-但当视图控制器2关闭时,我希望视图控制器3显示给用户。理想情况下,还可以关闭以查看控制器1 我知道我可以通过子视图来完成这一点。但理想情况下,我想学习如何通过操纵导航堆栈来实现 为了更好地理解您的问题,请尝试以下方法: 从VC 1显示VC 3,从VC 3立即显示VC 2(这可以通过将viewC

我试图介绍两个视图控制器。我尽量避免一个接一个地展示,因为这并不能提供良好的用户体验

我正在使用故事板/分段来显示视图控制器,每个视图控制器都嵌入到导航控制器中

行为应该是:

视图控制器1显示视图控制器2-但当视图控制器2关闭时,我希望视图控制器3显示给用户。理想情况下,还可以关闭以查看控制器1


我知道我可以通过子视图来完成这一点。但理想情况下,我想学习如何通过操纵导航堆栈来实现

为了更好地理解您的问题,请尝试以下方法:

从VC 1显示VC 3,从VC 3立即显示VC 2(这可以通过将viewController显示代码放入VC 3的ViewDidLoad()中来完成)

因此,当您退出VC 2时,将显示VC 3,退出VC 3时,您将被重定向到VC 1


VC的意思是ViewController。

在ViewDidLoad()中显示ViewController确实是个坏主意。


您可以显示VC3,并将VC1.view和VC2.view添加为VC3视图的子视图,以后您可以根据需要删除VC1.view和VC2.view,其行为将与预期的相同

我不认为你可以用
segue
做你想做的事,但是你当然可以用一点代码来做

这将(例如,在点击按钮时)直接从当前ViewController(称之为
vc1
)到
ViewController2
,但将
ViewController3
插入堆栈中,执行导航控制器中的标准幻灯片动画。点击后退按钮将带您从
vc2
vc3
vc1

@IBAction func didTap(_ sender: Any) {

    guard let vc3 = storyboard?.instantiateViewController(withIdentifier: "vc3"),
        let vc2 = storyboard?.instantiateViewController(withIdentifier: "vc2")
        else { return }

    let vcArray = [self, vc3, vc2]

    self.navigationController?.setViewControllers(vcArray, animated: true)

}
如果要从
vc2
返回到
vc1
并“跳过”
vc3
,请在
vc2
中添加(例如,点击按钮):


您需要将要显示的viewcontroller.modalPresentationStyle设置为.currentContext,并且需要将当前viewcontroller.DefinePresentationContext设置为false

如何显示它?UINavigationController中的“推送”序列?模态向上滑动和封面演示?添加您的语言标记,它始终是主语言。实际上,您不能在viewDidLoad()方法中演示或推送另一个ViewController。在viewDidLoad中编写推送或显示ViewController的代码将无效。@K.R.SaravanaKumar:是的,我的朋友,这就是我要说的。我们不应该在viewDidLoad()方法中显示或推送VC。检查第一行。在ViewDidLoad()中显示viewController确实是个坏主意。
@IBAction func backToStartTap(_ sender: Any) {

    self.navigationController?.popToRootViewController(animated: true)

}