这似乎应该很简单,但事实证明它有很多具有挑战性的细微差别 – 而且我还没有在Stack Overflow上的其他地方找到答案,它可以完全,清楚,简单地回答这个问题.
简而言之 – 我有一个使用故事板来布局应用程序流的iPad应用程序,以及一个拆分视图控制器作为主要根视图控制器.
此应用程序在启动时检查是否存储了登录凭据,如果存在,则直接跳转到UI,如果不存在,则会显示全屏登录页面.
但是挑战 – 应该在哪里进行这种条件检查,以及如何实例化登录屏幕?
我试过了我能想到的每一种排列.
在应用程序委托似乎是显而易见的地方,但调用segues或模态弹出窗口似乎被忽略,因为故事板中的视图尚未生效.
在拆分视图的细节控制器的启动方法中似乎是下一个显而易见的地方.
我能找到的最接近工作的解决方案如下所述:
https://stackoverflow.com/a/8224389/529774
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"Login"];
[vc setModalPresentationStyle:UIModalPresentationFullScreen];
[self presentModalViewController:vc animated:NO];
}
但是,通过拆分视图的详细视图控制器调用此实现,底层拆分视图会在屏幕上短暂闪烁.
如果我从viewDidAppear更改为viewWillAppear,则没有闪存 – 但即使屏幕旋转为横向,登录视图也会以纵向绘制.
正如我所说 – 这种条件登录显示似乎应该是常见且简单的,但我找不到一个简单的工作示例,它结合了拆分视图,故事板,旋转感知,并使UI不闪烁.
有小费吗?指出良好的工作实例?
最佳答案 我有完全相同的问题,但经过多次搜索,Duane的回答给了我一些见解.他的回答仍然在前一个视图中闪烁,但我通过使用以下方法解决了问题:
-(void)viewWillAppear:(BOOL)animated {
// Check if user is already logged in
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
if ([[prefs objectForKey:@"log"] intValue] == 1) {
self.view.hidden = YES;
}
}
-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
// Check if user is already logged in
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
if ([[prefs objectForKey:@"log"] intValue] == 1) {
[self performSegueWithIdentifier:@"homeSeg3" sender:self];
}
}
-(void)viewDidUnload {
self.view.hidden = NO;
}