我将我的项目分为两个故事板:
>
Main。情节提要
-用于经过身份验证的用户。这也是默认的故事板。
登录。情节提要
-适用于未经身份验证的用户。
应用程序代理文件:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
if(user is authenticated)
{
[self presentLoginScreen:YES];
return YES;
}
应用委托文件中的登录屏幕:
-(void)presentLoginScreen:(BOOL)animated{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Login" bundle:[NSBundle mainBundle]];
UIViewController *vc =[storyboard instantiateInitialViewController];
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.rootViewController = vc;
}
注销时,会显示登录屏幕。我在应用委托文件中定义了这个:
-(void)logOut{
//clear data
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Login" bundle:[NSBundle mainBundle]];
UIViewController *vc =[storyboard instantiateInitialViewController];
self.window.rootViewController = vc;
//Show login Screen
[self presentLoginScreen:NO];
}
从MainstryBoard的viewcontroller(比如MainstryBoardVC.m)中,注销被称为:
-(void)didTouchLogOut{
NSLog(@"GoodBye");
AppDelegate *appDelegateTemp = [[UIApplication sharedApplication]delegate];
[appDelegateTemp logOut];
}
这引起了很多问题:
>
首先,当我注销并移动到登录屏幕时,我仍然可以在后台看到main storyboardVc. m
,这看起来很笨拙。
我注销、重新登录并再次尝试注销时,会看到以下消息:
不建议在分离的视图控制器上显示视图控制器
不显示登录屏幕。
我在两个故事板之间的视图控制器演示上尝试了许多答案,但没有保留历史记录,似乎什么都不起作用。。。
两个UIViewController
对象是重复的,因为您设置了self。窗rootViewController
,适用于这两种类型。试试看;
-(void)presentLoginScreen:(BOOL)animated{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Login" bundle:[NSBundle mainBundle]];
UIViewController *vc =[storyboard instantiateInitialViewController];
self.window.rootViewController = vc;
[self.window makeKeyAndVisible];
}
注销
-(void)logOut{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Login" bundle:[NSBundle mainBundle]];
UIViewController *vc =[storyboard instantiateInitialViewController];
[self presentViewController:vc animated:YES completion:nil];
}
要替换UIViewController,在转换根视图控制器时需要调用其他几个方法:
目标c:
- (void)setRootViewController:(UIViewController *) newRootViewController {
UIViewController* currentViewController = self.window.rootViewController;
if (newRootViewController != currentViewController) {
[currentViewController willMoveToParentViewController:nil];
[currentViewController.view removeFromSuperview];
[currentViewController removeFromParentViewController];
self.window.rootViewController = newRootViewController;
}
}
迅速:
func setRootViewController(newRootViewController: UIViewController) {
if let currentViewController = self.window?.rootViewController {
if currentViewController != newRootViewController {
currentViewController.willMoveToParentViewController(nil)
currentViewController.view.removeFromSuperview()
currentViewController.removeFromParentViewController()
self.window?.rootViewController = currentViewController
}
}
}
我被一个问题困住了,我在官方留档、Stackoverflow或谷歌上找不到答案。 我是一名经验丰富的iOS开发人员,但不熟悉故事板。我想在当前viewcontroller上实例化一个视图,在NIB中,我将在viewcontroller外部绘制一个视图,并附加一个出口以在代码中引用它,并调用addSubview:之类的东西。在MapView委托中绘制覆盖图或详图索引视图非常有用。但我不知道如何在故事
我已经通读了《iOS View Controller编程指南》和《iOS View编程指南》,如果代码或情节提要中没有大量复制,我无法找到执行以下操作的最佳方法。 我正在为我的孩子们编写一个简单的数学教程程序,其中有一个带有数字“NumberPad”(数字0-9)的视图,以及一些动画的场景。 到目前为止,我有一个视图控制器,它处理简单的加减乘除问题,工作良好。 我想为一个视图控制器使用相同的数字键
我有一个需要在景观和肖像视图中呈现的视图。我使用这个解决方案来提供方向:故事板中方向的解决方案 所选视图是ViewController的视图,它有两个视图:第一个是纵向视图,第二个是横向视图。我隐藏了不符合设备方向的视图。 与图像中一样,视图、纵向视图和横向视图都有容器视图,通过segue链接到视图控制器。据我所知,故事板应该在加载主视图控制器时调用所有分段。我在方法中得到Segue调用。 如果肖
我在情节提要中建立了一些视图控制器,就像下面的图片 我已经实现了它们内部的数据,modal segue用于它们之间的转换。现在我才意识到,当我按“后退”按钮时,以前的视图将无法正确加载。我想我应该切换到导航控制器,并将这些控制器添加到堆栈中。但我不知道如何从我现在的位置走下去。 我认为我应该以编程方式进行更改,因为我发现在情节提要中构建导航控制器在UI设计上不会有太大的变化(至少我不知道如何以那种
我想做的是: 由父视图控制器管理的父视图不应旋转。 由子视图控制器管理的子视图应该旋转到所有方向。 我所尝试的: 家长视图控制器 儿童视图控制器 Xcode部署信息中支持的方向设置为所有四个。 我得到的: 没有视图的旋转。如果将父视图的旋转设置为“全部”,则所有视图将一起旋转。所以要么全有要么全无。 更新 当我尝试放置UIDeviceOrientationIDChangeNotification的
我正在开发一个游戏,其中第一个视图控制器将包含30个视图控制器的其余部分的全部功能,其中这些控制器的其余部分将是第一个视图控制器的子部分。我的计划是为我的应用程序中的所有30个视图控制器或场景使用单个故事板,它们都将使用相同的背景图像。为了让你知道我在说什么,我在这幅画中只展示了两个场景。故事板图像,但计划是有28更多的场景在这个相同的故事板。绘图。故事板 如果此故事板中的所有30个场景都具有相同