Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.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
Ios 如果当前视图嵌套较深,如何返回根视图控制器?_Ios_Objective C_Uiviewcontroller - Fatal编程技术网

Ios 如果当前视图嵌套较深,如何返回根视图控制器?

Ios 如果当前视图嵌套较深,如何返回根视图控制器?,ios,objective-c,uiviewcontroller,Ios,Objective C,Uiviewcontroller,我有一个问题,我的iOS应用程序有几个视图控制器 例如:名为A,B,C的视图控制器

我有一个问题,我的iOS应用程序有几个
视图控制器

例如:名为
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 delegate
didFinishLaunchWithOptions
方法中将其设置为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 delegate
didFinishLaunchWithOptions
方法中将其设置为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时代码不起作用~