Ios 使UIViewController位于导航控制器外部
我有个问题要问你。我正在开发这个应用程序,它有一个演练/教程屏幕和登录屏幕。在每个屏幕上都有一个按钮,可以跳过此部分并直接使用该应用程序,而无需完成注册(您知道,这样人们可以在登录前对其进行测试) 正如你所看到的,我正在使用故事板。NowPlaying04 ViewController实际上就是应用程序本身。显然,当用户是注册用户时,我也应该能够跳回该屏幕,跳过演练和登录过程 第一个问题是:构建这一体系的最佳方式是什么 第二个问题是:如何在导航控制器之外创建ViewController。原因正如您现在看到的,NowPlaying04 ViewController继承了顶部导航栏。这是我不想要的。我不需要那个Ios 使UIViewController位于导航控制器外部,ios,iphone,objective-c,uiviewcontroller,Ios,Iphone,Objective C,Uiviewcontroller,我有个问题要问你。我正在开发这个应用程序,它有一个演练/教程屏幕和登录屏幕。在每个屏幕上都有一个按钮,可以跳过此部分并直接使用该应用程序,而无需完成注册(您知道,这样人们可以在登录前对其进行测试) 正如你所看到的,我正在使用故事板。NowPlaying04 ViewController实际上就是应用程序本身。显然,当用户是注册用户时,我也应该能够跳回该屏幕,跳过演练和登录过程 第一个问题是:构建这一体系的最佳方式是什么 第二个问题是:如何在导航控制器之外创建ViewController。原因正
我希望你理解我的问题。我将感谢任何帮助。通过编程或拖动东西,我对所有的解决方案都满意。重要的是它工作正常!:-) 如果我是你,我会将寄存器VCs显示为一个模式
if (!registered){
[nowPlaying04 presentViewController:registrationNav animated:YES completion:nil];
}
如果我是你,我会将注册VCs作为一个模式
if (!registered){
[nowPlaying04 presentViewController:registrationNav animated:YES completion:nil];
}
如果您只想隐藏导航栏,但将此代码隐藏到您的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];
NSInteger索引=-1;
NSArray*arr=[[NSArray alloc]initWithArray:self.navigationController.ViewController];
对于(int i=0;i,如果您只想隐藏导航栏,但将此代码保存到您的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];
NSInteger索引=-1;
NSArray*arr=[[NSArray alloc]initWithArray:self.navigationController.ViewController];
对于(int i=0;i问题1:
您可以设置跳过按钮的实现,以导航到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方法或viewWillAspect方法中,只需将导航栏设置为隐藏
navBar.hidden = YES;
问题1:
您可以设置跳过按钮的实现,以导航到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方法或viewWillAspect方法中,只需将导航栏设置为隐藏
navBar.hidden = YES;
因此,我可能找到了解决此问题的方法,使用AppDelegate.m。如果您使用的是故事板,则不需要在AppDelegate.h中导入ViewController类,因为您使用的是故事板ID引用它们。它看起来像这样:
- (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属性在视图控制器上设置标识符。为应用程序中的BOOL变量userlogged设置一个不同的值,并使用相对rootViewController加载
现在,情节提要如下所示:
- (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;
}
它的组织性更强。isInitialViewController在NowPlaying04屏幕上被标记。但是AppDelegate根据isLoggedIn BOOL变量决定是转到它还是切换到NavigationController(ID为Start00)
感谢@khаааГааааГааааааааааааааааааааа他的:
- (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属性在视图控制器上设置标识符。为应用程序中的BOOL变量userlogged设置一个不同的值,并使用相对rootViewController加载
现在,情节提要如下所示:
- (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;
}
它的组织性更强。isInitialViewController在NowPlaying04屏幕上被标记。但是AppDelegate根据isLoggedIn BOOL变量决定是转到它还是切换到NavigationController(ID为Start00)
感谢@khаааГаааааааааааааааааааааааааer用户关闭了您的应用程序,例如高分、登录信息和程序状态
用户从应用程序中的任何位置登录后,您可以通过以下方式保存数据:
NSNumber *userLoggedIn = [NSNumber numberWithBool:NO];
[[NSUserDefaults standardUserDefaults] setObject:userLoggedIn forKey:@"log"];
然后您可以通过检索以下内容进行检查:
NSNumber *userLoggedIn = [[NSUserDefaults standardUserDefaults]objectForKey:@"log"];
if ([userLoggedIn boolValue]){
//user logged
}
e、 这个不错的技术甚至可以让你检测到你的第一次发射,并向用户展示一些教程:)@user1447316,我很高兴你喜欢我的想法。但是,我宁愿使用标准用户默认值而不是局部变量userLoggedIn。当你想保存少量数据时,这种方式非常好,即使用户关闭了你的应用程序,你也需要这些数据,例如高分、登录信息和程序状态
用户从应用程序中的任何位置登录后,您可以通过以下方式保存数据:
NSNumber *userLoggedIn = [NSNumber numberWithBool:NO];
[[NSUserDefaults standardUserDefaults] setObject:userLoggedIn forKey:@"log"];
然后您可以通过检索以下内容进行检查:
NSNumber *userLoggedIn = [[NSUserDefaults standardUserDefaults]objectForKey:@"log"];
if ([userLoggedIn boolValue]){
//user logged
}
e、 x.这项很好的技术甚至可以让您检测到您的首次启动,并向用户显示一些教程:)以检查用户是否已签名使用[NSUserDefaults standardUserDefaults],根据情况使用不同的rootviewcontroller并跳过所有的签名vc。@。告诉我更多关于这个!现在,我已经在AppDelegate中设置了一个BOOL值(只是为了测试这一点):-(BOOL)application:(UIApplication*)application didnishlaunchingwithoptions:(NSDictionary*)launchOptions{BOOL userLoggedIn=NO;if(userLoggedIn){self.window.rootViewController=[[NowPlaying04 alloc]init];}else{self.window.rootViewController=[[walkthrowh01 alloc]init];}}