在android中,在 Activity 之间进行切换非常简单

你打电话

Intent intent = new Intent(this,NextActivity.class); <- define the next activity
startActivity(intent); <- start the next activity
finish(); < -get rid of the current activity

现在在iOS我知道如何做到这一点:
UIViewController *nextviewcontroller = [[UIViewController alloc]initWithNibName:@"nextvc" bundle:nil];
[self presentViewcontroller:nextviewcontroller animated:YES completion:nil];

如何摆脱当前的视图控制器?这样currentviewcontroller在呈现nextviewcontroller后就死了吗?

[self dismissViewController:YES];似乎并没有达到目的

即使我不调用[self dismissViewController:YES];,也会调用生命周期方法viewWillDisappear和viewDidDisappear

我想从currentviewcontroller和viewcontroller堆栈中删除“memory”,以便在“nextviewcontroller”中单击“back”将转到currentviewcontroller之前的某个thirdviewcontroller

最佳答案

在iOS中有所不同,因为没有 Activity 的概念,并且所有内容都更加专注于应用本身(在Android中,您可以混合来自不同应用的 Activity )。因此,没有“视图控制器堆栈”的概念。
最相似的概念是导航控制器的“导航堆栈”,您实际上在其中将新视图控制器推入并弹出到某种线性导航中。导航栏将自动创建,并使用后退按钮填充。

presentViewController会在当前控制器上以模态方式显示您的视图控制器,但是您不能通过它来显示控制器,因为它正在保存并包含(“定义上下文”)新控制器。

如果您将导航控制器用于导航层次结构(不知道是否可以),则可以覆盖“后退”按钮并使用类似

UIViewController * prev = self.navigationController.viewControllers[self.navigationController.viewControllers.count -2 ]
[self.navigationController popToViewController:prev animated:YES]

使用模态视图控制器,您可以尝试类似的操作(我还没有尝试过,但是可能会起作用)
[self.presentingViewController.navigationController popViewControllerAnimated:YES]

您应将这些代码之一写入关闭按钮的目标操作中。

10-08 15:34