Ios5 在应用程序启动时,使用情节串连板和拆分视图控制器正确显示条件登录屏幕?

Ios5 在应用程序启动时,使用情节串连板和拆分视图控制器正确显示条件登录屏幕?,ios5,uisplitviewcontroller,uistoryboard,Ios5,Uisplitviewcontroller,Uistoryboard,这看起来应该很简单,但事实证明它有很多具有挑战性的细微差别——在堆栈溢出的其他地方,我还没有找到一个完全、清晰、简单的答案 简而言之,我有一个iPad应用程序,它使用故事板来布局应用程序流,还有一个拆分视图控制器作为主根视图控制器 该应用程序在启动时检查是否存储了登录凭据,如果是,则直接跳转到UI,如果不是,则显示全屏登录页面 然而,挑战是——应该在哪里进行条件检查,以及如何实例化登录屏幕 我已经尝试了我能想到的每一种排列方式 在应用程序中,委托似乎是显而易见的地方,但调用segue或模态弹出窗

这看起来应该很简单,但事实证明它有很多具有挑战性的细微差别——在堆栈溢出的其他地方,我还没有找到一个完全、清晰、简单的答案

简而言之,我有一个iPad应用程序,它使用故事板来布局应用程序流,还有一个拆分视图控制器作为主根视图控制器

该应用程序在启动时检查是否存储了登录凭据,如果是,则直接跳转到UI,如果不是,则显示全屏登录页面

然而,挑战是——应该在哪里进行条件检查,以及如何实例化登录屏幕

我已经尝试了我能想到的每一种排列方式

在应用程序中,委托似乎是显而易见的地方,但调用segue或模态弹出窗口似乎被忽略,因为故事板中的视图还没有激活

在拆分视图的启动方法中,细节控制器似乎是下一个明显的位置

我能找到的最接近工作的解决方案如下所述:

但是,通过这个由分割视图的细节视图控制器调用的实现,底层分割视图会在屏幕上短暂闪烁

如果我从ViewDidDisplay更改为ViewWillDisplay,则不会出现闪光灯-但登录视图最终会以纵向方式绘制,即使屏幕旋转为横向

正如我所说的,这种有条件的登录显示似乎应该是常见且简单的,但我在任何地方都找不到一个简单的工作示例,它结合了分割视图、故事板、旋转感知,并且可以防止UI闪烁


有什么建议吗?指向好的工作示例的指针?

我可以通过让用户看到的第一个视图控制器是登录屏幕来实现这一点。然后有一个segue连接到下一个屏幕,它有一个tabview或splitview,或者你想要的任何东西


第一个控制器处理默认值和登录凭据,一旦全部检查和验证完毕,则按照顺序操作……否则,它会向用户显示登录和/或错误并显示在那里。

在添加子视图之前,必须将window.hidden属性设置为“否”:

UITabBarController* tc = (UITabBarController*) self.window.rootViewController;

// Present the log in view controller
self.window.hidden = NO; // the window is initially hidden
[tc presentViewController:logInViewController animated:NO completion:NULL];

我遇到了完全相同的问题,但经过多次搜索,杜安的回答给了我一些启示。他的答案仍然在前面的视图中闪烁,但我使用以下方法解决了问题:

-(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;
}

这就是我在SWIFT中解决它的方法

override func viewWillAppear(animated: Bool) {
    let prefs:NSUserDefaults = NSUserDefaults.standardUserDefaults()

    let isloggedIn = prefs.objectForKey("isLoggedIn") as? Bool
    if (isloggedIn != false) {
        self.view.hidden = true
    } else {
        self.view.hidden = false
    }
}

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(true)

    let prefs:NSUserDefaults = NSUserDefaults.standardUserDefaults()

    let isloggedIn = prefs.objectForKey("isLoggedIn") as? Bool
    if (isloggedIn != false) {
        println("this should work")
        self.performSegueWithIdentifier("Login", sender: self)
    }
}

据我所知,您的技术不适用于分割视图控制器-UISplitViewController希望成为根,否则会导致屏幕旋转出现大量问题。如果你有一个很好的工作示例,我很想看看。是的,众所周知(而且令人恼火!)你不能更改为分割视图控制器,它们必须是“整个应用”。(苹果,真的很傻。)
override func viewWillAppear(animated: Bool) {
    let prefs:NSUserDefaults = NSUserDefaults.standardUserDefaults()

    let isloggedIn = prefs.objectForKey("isLoggedIn") as? Bool
    if (isloggedIn != false) {
        self.view.hidden = true
    } else {
        self.view.hidden = false
    }
}

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(true)

    let prefs:NSUserDefaults = NSUserDefaults.standardUserDefaults()

    let isloggedIn = prefs.objectForKey("isLoggedIn") as? Bool
    if (isloggedIn != false) {
        println("this should work")
        self.performSegueWithIdentifier("Login", sender: self)
    }
}