在android中,在活动之间切换相当简单
你打电话给
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:是的;似乎没有起到作用
即使不调用[self dismissViewController:YES];,也会调用生命周期方法viewWillDisappear和viewDidDisappear
我希望从memory和视图控制器堆栈中删除"currentviewcontroller“,这样单击"nextviewcontroller”中的"back“将转到当前视图控制器之前的某个第三个视图控制器。
发布于 2014-04-10 17:10:50
在iOS中则不同,因为没有活动的概念,一切都更专注于应用程序本身(在安卓系统中,你可以混合来自不同应用程序的活动)。因此,没有“视图控制器堆栈”的概念。最相似的概念是导航控制器的“导航堆栈”,您实际上将新的视图控制器推入和弹出到某种线性导航中。系统会自动创建导航栏,并使用后退按钮填充导航栏。
presentViewController将在当前视图控制器的基础上以模态方式显示您的视图控制器,但您不能颠覆呈现的视图控制器,因为它持有并包含(“定义上下文”)新的视图控制器。
如果您为导航层次结构使用导航控制器(我不知道您是否可以),您可以覆盖back按钮,并使用类似于
UIViewController * prev = self.navigationController.viewControllers[self.navigationController.viewControllers.count -2 ]
[self.navigationController popToViewController:prev animated:YES]使用模式视图控制器,您可以尝试类似(我还没有尝试过,但它可能会起作用)
[self.presentingViewController.navigationController popViewControllerAnimated:YES]您应该将这些代码之一写入到close按钮的目标操作中。
发布于 2014-04-10 17:13:03
iOS不像安卓那样维护一个全局的控制器堆栈。每个应用程序在其根目录显示一个控制器,该控制器负责显示应用程序中的其他控制器。控制器可以使用presentViewcontroller:animated:completion:以模态方式显示其他控制器,但呈现的控制器仍位于呈现的控制器的下方。
如果您当前的控制器是根控制器,那么您可以这样做,而不是使用presentViewcontroller:animated:completion::
self.view.window.rootViewController = nextViewController;根控制器通常是一个UINavigationController,它管理一堆控制器。如果是这样的话,如果你的当前控制器在堆栈的顶部,你可以这样做:
[self.navigationController popViewControllerAnimated:NO];
[self.navigationController pushViewController:nextViewController animated:YES];如果你的设置不同,你就会做一些不同的事情;如果不知道更多,就很难说出是什么。但最有可能的是你在UINavigationController的情况下。
发布于 2014-04-10 17:05:49
在下一个视图控制器的viewDidAppear中,您可以添加:
-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
NSArray *controllers = self.navigationController.viewControllers;
NSMutableArray *newViewControllers = [NSMutableArray arrayWithArray:controllers];
[newViewControllers removeObjectAtIndex:[controllers count]-2];
self.navigationController.viewControllers = newViewControllers;
}https://stackoverflow.com/questions/22983353
复制相似问题