在导航控制器之外制作UIViewController
我有一个问题问你。 我正在开发这个应用程序,其中有一个演练/教程屏幕,也login。 在每个屏幕上都有一个button可以跳过这个部分,直接使用应用程序,而无需完成注册(您知道,这样人们可以在login前testing它)。
正如你所看到的我正在使用故事板。 NowPlaying04 ViewController实际上是应用程序本身。 显然,当用户将是一个注册的,我也应该能够跳回到该屏幕,跳过漫游和login过程。
第一个问题是:如何构build这个最好的方法?
第二个问题是:我怎样才能使该导航控制器以外的ViewController。 因为你现在可以看到,NowPlaying04 ViewControllerinheritance了顶部导航栏。 这是我不想要的东西。 我不需要那个
我希望你能理解我的问题。 我会感谢任何帮助。 以编程方式或通过拖动东西,我确定所有的解决scheme。 重要的是它正常工作! 🙂
如果你只是想隐藏导航栏,但是这个代码到你的ViewController.m:
- (void)viewWillAppear:(BOOL)animated{ [self.navigationController setNavigationBarHidden:YES animated:animated]; } - (void)viewWillDisappear:(BOOL)animated{ [self.navigationController setNavigationBarHidden:NO animated:animated]; [super viewWillDisappear:animated]; }
要跳转到特定的ViewController,您可以使用以下代码:
NSInteger index = -1; NSArray* arr = [[NSArray alloc] initWithArray:self.navigationController.viewControllers]; for(int i=0 ; i<arr.count ; i++) { if([[arr objectAtIndex:i] isKindOfClass:NSClassFromString(@"Your_ViewController_Class_Name")]) { index = i; } } [self.navigationController popToViewController:[arr objectAtIndex:index] animated:YES];
问题1:
您可以设置跳过button的实现来导航到NowPlaying04视图控制器。
UIButton* skipButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; [skipButton addTarget:self action:@selector(skip) forControlEvents:UIControlEventTouchUpInside]; -(void)skip { NowPlaying04* nowPlayingController = [[NowPlaying04 alloc] init]; [self.navigationController pushViewController:nowPlayingController animated:YES]; }
问题2:
将导航栏设置为隐藏在NowPlaying04中。 在NowPlaying04的init方法或viewWillAppear方法中,只需将导航栏隐藏即可。
navBar.hidden = YES;
@ user1447316,我很高兴你喜欢我的想法。 但是,我宁愿使用standarduserdefaults而不是本地variablesuserLoggedIn。 如果您希望在用户closures应用程序(例如高分,login信息和程序状态)后保存less量数据,则这种方式非常有用。
用户通过以下方式从应用程序中的任意位置进行login后,即可保存数
NSNumber *userLoggedIn = [NSNumber numberWithBool:NO]; [[NSUserDefaults standardUserDefaults] setObject:userLoggedIn forKey:@"log"];
然后你可以检索:
NSNumber *userLoggedIn = [[NSUserDefaults standardUserDefaults]objectForKey:@"log"]; if ([userLoggedIn boolValue]){ //user logged }
前这个不错的技术将让你甚至可以检测到你的第一次启动,并显示给用户一些教程:)
如果我是你,我会把注册风险投资作为一种模式。
if (!registered){ [nowPlaying04 presentViewController:registrationNav animated:YES completion:nil]; }
所以我也许使用AppDelegate.mfind了解决这个问题的方法。 如果您使用的是Storyboard,则无需在AppDelegate.h中导入ViewController类,因为您正在使用StoryboardID引用它们。 它看起来像这样:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { BOOL userLoggedIn = NO; if (userLoggedIn) { UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; UIViewController *controller = [storyboard instantiateViewControllerWithIdentifier:@"NowPlaying04"]; [self.window setRootViewController:controller]; } else { UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; UIViewController *controller = [storyboard instantiateViewControllerWithIdentifier:@"Start00"]; [self.window setRootViewController:controller]; } [self.window makeKeyAndVisible]; // Override point for customization after application launch. return YES; }
显然你需要通过InterfaceBuilder / Storyboard属性在视图控制器上设置标识符。 为BOOLvariables设置一个不同的值userLogged在应用程序中加载相对的rootViewController。
现在故事板看起来像这样:
哪个更有组织。 isInitialViewController在NowPlaying04屏幕上被标记。 但是,AppDelegate决定是否转到它,或者切换到基于isLoggedIn BOOLvariables的NavigationController(ID为Start00)。
感谢@НаильГалиаскаров使用不同的rootViewControllers的想法。
- 什么是void *以及它可以指向哪些variables/对象
- ios7调整iPodMusicPlayer音量
- OpenCV – 如何将自适应阈值应用于iOS上的图像
- UINavigationController interactivePopGestureRecognizer在iOS7中工作exception
- iOS:将UTC时区转换为设备本地时区
- 如何获得当前在xamarin中的GPS坐标
- 如何从iPhone摄像头使用图像Exif元数据获取对象的距离?
- Xamarin – iOS在地图上的多个多边形
- 我们可以从手机(Android / iOS)中select一个图像,并使用通用代码(Xamarin Forms)将其上传到服务器?