IOS-重新打开应用程序后导航到主视图

时间:2015-07-03 08:13:24

标签: ios login navigation

我正在开发一个iPhone项目,我在其中创建登录页面。 我希望当用户登录到应用程序之后,每次他/她打开应用程序时,他都会自动登录到应用程序。 它现在正在我的应用程序中工作(用户ID和密码保存)现在我想在登录后下次用户打开应用程序第一个视图显示在屏幕上是除了登录视图之外的主视图。

我的代码

- (void)viewDidLoad
    {
        NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults];
        checked=[standardDefaults boolForKey:@"boxIsChecked"];
        userid.text=[standardDefaults objectForKey:@"email"];
        password.text=  [standardDefaults objectForKey:@"password"];
        [self checkTheBox];
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
    }



-(IBAction)CheckBtn_click:(id)sender
{

NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults];
if(!checked)
{
    //NSLog(@"The value of the bool is %@\n", (checked ? @"YES" : @"NO"));
    [CheckBtn setBackgroundImage:[UIImage imageNamed:@"pro-checked.png"] forState:UIControlStateNormal];
    checked=YES;
    [standardDefaults setBool:checked forKey:@"boxIsChecked"];
    [standardDefaults setObject:userid.text forKey:@"email"];
    [standardDefaults setObject:password.text forKey:@"password"];
}
else if(checked)
{
    [CheckBtn setBackgroundImage:[UIImage imageNamed:@"Check-Box.png"] forState:UIControlStateNormal];
    checked=NO;
    [standardDefaults setBool:checked forKey:@"boxIsChecked"];
    [standardDefaults setObject:NULL forKey:@"email"];
    [standardDefaults setObject:NULL forKey:@"password"];
}
[standardDefaults synchronize];
}

-(void)checkTheBox
{
if(!checked)
{

    [CheckBtn setBackgroundImage:[UIImage imageNamed:@"Check-Box.png"] forState:UIControlStateNormal];
}
else if(checked)
{
    [CheckBtn setBackgroundImage:[UIImage imageNamed:@"pro-checked.png"] forState:UIControlStateNormal];

}
}

2 个答案:

答案 0 :(得分:2)

一种方法是在Storyboard中添加一个新的视图控制器,并将其设置为初始视图控制器(如果使用Storyboard)。然后,为该新视图控制器创建一个子类并实现这种逻辑:

// in initial view controller
- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];

    if (isLoggedIn) {
        // user is logged in, so segue straight to the main view
        [self performSegueWithIdentifier:@"main" sender:self];
    } else {
        // user isn't logged in, so segue to login view
        [self performSegueWithIdentifier:@"login" sender:self];
    }
}

然后,您需要将初始视图控制器中的segue添加到登录页面(并将segue标识符设置为login)并添加到主应用程序视图控制器(并将segue标识符设置为main )。

另请注意,您绝不应将密码作为纯文本存储在NSUserDefaults中,因为任何人都可以轻松访问它们。请勿这样做。相反,将它们存储在钥匙串中。这是一个很棒的教程,你应该阅读:http://www.raywenderlich.com/92667/securing-ios-data-keychain-touch-id-1password

答案 1 :(得分:0)

在appdelegate中添加此代码(确实已启动)

您可以从故事板中选择特定的笔尖。 注意 - 向xib添加标识符。即在这种情况下[LoginView]

if (isLoggedIn)
{

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
    LoginView *loginView=[storyboard instantiateViewControllerWithIdentifier:@"LoginView"];
    UINavigationController *nav=[[UINavigationController alloc]initWithRootViewController:loginView];
    [loginView setNavigationBarHidden:YES];
    self.window.rootViewController=loginView;
}
else
{
// your normal login code
}