Ios 如果当前视图嵌套较深,如何返回根视图控制器?
我有一个问题,我的iOS应用程序有几个Ios 如果当前视图嵌套较深,如何返回根视图控制器?,ios,objective-c,uiviewcontroller,Ios,Objective C,Uiviewcontroller,我有一个问题,我的iOS应用程序有几个视图控制器 例如:名为A,B,C的视图控制器
视图控制器
例如:名为A
,B
,C
的视图控制器<使用pushViewController
,B
使用presentViewController
跳到C
,C
使用presentViewController
跳到D
,依此类推
如果当前ViewController是
Z
或其他某个ViewController,如何直接跳回A
?对于通过pushViewController
显示的视图控制器,您可以通过[self.navigationController.ViewController objectAtIndex:0]
其他由
presentViewController
显示,您可以通过self.presentingViewController
获取父视图控制器。对于由pushViewController
显示的视图控制器,您可以通过[self.navigationController.viewControllers objectAtIndex:0]获取rootViewController
通过presentViewController
显示的其他视图,您可以通过self.presentingViewController尝试下面的代码来获取父视图控制器。它适用于所有情况:
for (UIViewController *controller in self.navigationController.viewControllers)
{
if ([controller isKindOfClass:[nameOfYourViewControllerYouWantToNavigate class]])
{
if(controller.isBeingPresented)
[controller.presentingViewController dismissViewControllerAnimated:YES completion:NULL];
else
[self.navigationController popToViewController:controller animated:YES];
break;
}
}
尝试下面的代码。它适用于所有情况:
for (UIViewController *controller in self.navigationController.viewControllers)
{
if ([controller isKindOfClass:[nameOfYourViewControllerYouWantToNavigate class]])
{
if(controller.isBeingPresented)
[controller.presentingViewController dismissViewControllerAnimated:YES completion:NULL];
else
[self.navigationController popToViewController:controller animated:YES];
break;
}
}
它会将viewcontroller弹出到根控制器
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
self.window = [[UIWindow alloc]initWithFrame:[[UIScreen mainScreen] bounds]];
AViewController *aVC = [[AViewController alloc]initWithNibName:@“AViewController" bundle:nil];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:aVC];
self.window.rootViewController = aVC;
[navController setNavigationBarHidden:YES];
self.window.backgroundColor = [UIColor clearColor];
[self.window makeKeyAndVisible];
return YES;
}
它会将您的viewcontroller弹出到根控制器。无论您想从任何其他视图控制器返回viewcontroller,首先必须将其设置为RootViewController
。如果使用XIB,则必须在app delegatedidFinishLaunchWithOptions
方法中将其设置为root。如果使用序列图像板,则应在序列图像板中设置NavigationController
,并使用control+drag(鼠标)将AViewController设置为ROOT。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
self.window = [[UIWindow alloc]initWithFrame:[[UIScreen mainScreen] bounds]];
AViewController *aVC = [[AViewController alloc]initWithNibName:@“AViewController" bundle:nil];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:aVC];
self.window.rootViewController = aVC;
[navController setNavigationBarHidden:YES];
self.window.backgroundColor = [UIColor clearColor];
[self.window makeKeyAndVisible];
return YES;
}
我在一个有很多视图控制器的项目中工作。它有pushViewController
和PresentViewControllers
而且我还将其设置为RootViewController
。所以我可以从任何视图控制器返回到RootViewController
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
self.window = [[UIWindow alloc]initWithFrame:[[UIScreen mainScreen] bounds]];
AViewController *aVC = [[AViewController alloc]initWithNibName:@“AViewController" bundle:nil];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:aVC];
self.window.rootViewController = aVC;
[navController setNavigationBarHidden:YES];
self.window.backgroundColor = [UIColor clearColor];
[self.window makeKeyAndVisible];
return YES;
}
用于从任何其他视图控制器转到AViewController
- (IBAction)actionGoBack:(id)sender
{
[self.navigationController popToRootViewControllerAnimated:YES];
}
无论您想从任何其他视图控制器返回到ViewController,首先必须将其设置为RootViewController
。如果使用XIB,则必须在app delegatedidFinishLaunchWithOptions
方法中将其设置为root。如果使用序列图像板,则应在序列图像板中设置NavigationController
,并使用control+drag(鼠标)将AViewController设置为ROOT。
我在一个有很多视图控制器的项目中工作。它有pushViewController
和PresentViewControllers
而且我还将其设置为RootViewController
。所以我可以从任何视图控制器返回到RootViewController
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
self.window = [[UIWindow alloc]initWithFrame:[[UIScreen mainScreen] bounds]];
AViewController *aVC = [[AViewController alloc]initWithNibName:@“AViewController" bundle:nil];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:aVC];
self.window.rootViewController = aVC;
[navController setNavigationBarHidden:YES];
self.window.backgroundColor = [UIColor clearColor];
[self.window makeKeyAndVisible];
return YES;
}
用于从任何其他视图控制器转到AViewController
- (IBAction)actionGoBack:(id)sender
{
[self.navigationController popToRootViewControllerAnimated:YES];
}
在这里有一个抢夺。。您是否在使用navigationController?@iGodric谢谢您的编辑,我的英语真的很差……)多亏了大家的耐心,我们才有机会。。您是否在使用navigationController?@iGodric谢谢您的编辑,我的英语真的很差……)谢谢大家的耐心谢谢,让我试试看,如果答案有效,请接受。这就是我们的动机。很抱歉忘记接受。在前面描述的情况下,由于“presentViewController”和“pushViewController”太多,代码无法工作。最后,我通过向基本VC添加一个返回函数解决了这个问题。谢谢你的帮助~~很难读懂我的话,不是吗?多亏了大家的耐心,我想可能是因为我的英语不好,我还没有把我的问题描述清楚,但是仍然有很多人给我提建议。此外,我希望我能分享我的解决方案,但我的英语真的很差,我可能无法清楚地描述它。哈哈…我以后会更新代码的。谢谢,让我试试~@tandd如果答案有效,请接受。这就是我们的动机。很抱歉忘记接受。在前面描述的情况下,由于“presentViewController”和“pushViewController”太多,代码无法工作。最后,我通过向基本VC添加一个返回函数解决了这个问题。谢谢你的帮助~~很难读懂我的话,不是吗?多亏了大家的耐心,我想可能是因为我的英语不好,我还没有把我的问题描述清楚,但是仍然有很多人给我提建议。此外,我希望我能分享我的解决方案,但我的英语真的很差,我可能无法清楚地描述它。哈哈…我以后会更新代码。这里有显示的viewcontroller时代码不起作用~这里有显示的viewcontroller时代码不起作用~