我目前正在开发一个将使用多个故事板的应用程序,如下所示:
1)login.storyboard(处理注册和登录)
2)main.storyboard(处理游戏选项和选择)
3)settings.storyboard(处理游戏设置)
4)game.storyboard(实际游戏)
我目前正在测试NSUserDefaults中的会话令牌,如果它存在,请使用以下命令加载main.storyboard,否则为auth.storyboard:
NSUserDefaults *tagDefaults = [NSUserDefaults standardUserDefaults];
if (![tagDefaults objectForKey:@"session_token"]) {
NSLog(@"session token not found");
NSString *storyboardId = @"nonauth";
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"login" bundle:nil];
UIViewController *initViewController = [storyboard instantiateViewControllerWithIdentifier:storyboardId];
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.rootViewController = initViewController;
[self.window makeKeyAndVisible];
} else {
NSString *storyboardId = @"init";
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"init" bundle:nil];
UIViewController *initViewController = [storyboard instantiateViewControllerWithIdentifier:storyboardId];
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.rootViewController = initViewController;
[self.window makeKeyAndVisible];
}
如果登录返回有效,则从登录屏幕我使用它在我的NSURLSession完成处理程序中从login.storyboard切换到main.storyboard:
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"main" bundle:nil];
UINavigationController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"main"];
self.view.window.rootViewController = viewController;
我的两个问题是: A)这是实现这个的正确方法吗? B)在main.storyboard实际加载(延迟20-30秒)之前从login.storyboard执行切换后有相当长的延迟,有没有办法加快速度或改进代码以避免这种延迟?
提前致谢。
Ĵ
答案 0 :(得分:4)
请勿更改根视图控制器。没有必要。应用程序应该在应用程序的整个生命周期内都有一个根视图控制器。如果要使用视图控制器的视图完全替换该接口,则显示该视图控制器。呈现的视图控制器可以出现,并在应用程序的剩余生命周期内保持不变。 (实际上,如果登录界面是更罕见的界面,那么将主界面作为主界面并在其上面显示登录界面会更有意义。)
出于同样的原因,无需同时使用登录故事板和主故事板。这些界面集可以在同一个故事板中,因此无需加载新的故事板。
答案 1 :(得分:2)
我倾向于以模态方式呈现登录VC。我总是加载主VC。如果不存在会话令牌,那么我模态地呈现登录VC而没有动画。实际上,这使得它看起来好像启动时存在登录视图。一旦用户成功登录,您就可以解除典型的模式消除(从屏幕底部掉下来)或做一些像交叉淡入淡出的事情。
对于故事板,我个人使用多个。如果您有一个非平凡的应用程序,SB中的视图数量可能会变得非常大。它可能很难管理 - 在视图海中找到你想要的那个是令人讨厌和耗时的。此外,它让我的机器可怕地陷入困境。也许最重要的是,如果你正在组建一个拥有源代码控制的团队(你绝对应该使用它) - 尝试管理对单一SB的访问权限真的很烦人。通常,如果多个开发人员修改单个SB,则无法合并更改。至少有多个人可以将不同的人分配给不同的任务,每个任务都与自己的SB绑定。拥有多个SB没有性能优势(只有实例化的视图占用内存)。但从开发效率的角度来看,有一些优势。