我的应用程序中有一个带有导航控制器和几个视图的故事板。这会自动将带有后退按钮的导航栏放入任何不是根视图的视图中。
然而,有时我会从这个故事板导航到一个单独的笔尖。我想导航回故事板,但不一定要回到原始的根视图。我目前使用这种方法:
+(void) TransitionOnStoryboard:(NSString*)storyboard to:(NSString*)identifier withViewController:(UIViewController*)viewController
{
UIStoryboard *sb = [UIStoryboard storyboardWithName:storyboard bundle:nil];
UIViewController *vc = [sb instantiateViewControllerWithIdentifier:identifier];
vc.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[viewController presentViewController:vc animated:YES completion:NULL];
}
这显示了我想要的视图但没有导航栏。如何指定导航控制器或根视图,以便应用程序知道如何将带有后退按钮的导航栏放入?
由于
答案 0 :(得分:0)
答案是将导航控制器放在从笔尖添加的视图控制器下面。
将笔尖呈现为完整的0屏幕模态。如果您的导航栏,根据需要摆脱。从新的视图控制器,你可以推送更多的模态,添加导航控制器,或其他任何。
请注意,您可以完成所有这些操作并保留在故事板中。
完成后,关闭模式以显示导航控制器,然后重新开始使用故事板。您可以将新的视图控制器推送到导航控制器上而不需要动画,当您弹出来自笔尖的模态时,它应该显示为最前面的VC。
答案 1 :(得分:0)
我确信这不是解决这个问题的理想方式,但它对我来说确实很有效。
基本上,我从视图控制器中删除了自我导航离开故事板后生成的所有视图,但在当前视图之前并弹出当前视图。在这种情况下,这些视图属于一个类(CheckboxListViewController),因此可以简单地删除如下:
+(void) navigateToMainMenu:(UINavigationController*)navigationController
{
[QuickView removeFromNavigationController:navigationController allOfViewControllerWithClass:[CheckboxListViewController class]];
[navigationController popViewControllerAnimated:YES];
}
+(void) removeFromNavigationController:(UINavigationController *)navigationController allOfViewControllerWithClass:(Class)viewControllerClass
{
NSMutableArray *keptViewControllers = [[NSMutableArray alloc]init];
for (UIViewController *viewController in navigationController.viewControllers)
if (![viewController isKindOfClass:viewControllerClass])
[keptViewControllers addObject:viewController];
navigationController.viewControllers = keptViewControllers;
}
(注意 - QuickView是包含这些方法的类的名称。)。
您不希望弹出窗口导航回来的任何其他类可以通过调用:
删除[QuickView removeFromNavigationController:navigationController allOfViewControllerWithClass:[YourClassName class]];
在navigateToMenu方法中。