IOS- 重新打开应用程序后导航到主视图
IOS- navigation to main view after reopening of application
我正在开发一个 iPhone 项目,我在其中创建了登录页面。
我希望当用户在每次 he/she 打开应用程序后登录到应用程序时,他都会自动登录到应用程序。
它现在在我的应用程序中工作(用户 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];
}
}
一种方法是在您的 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
在您的 appdelegate(已启动)中添加此代码
您可以 select 情节提要中的特定笔尖。
注意 - 将标识符添加到您的 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
}
我正在开发一个 iPhone 项目,我在其中创建了登录页面。 我希望当用户在每次 he/she 打开应用程序后登录到应用程序时,他都会自动登录到应用程序。 它现在在我的应用程序中工作(用户 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];
}
}
一种方法是在您的 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
在您的 appdelegate(已启动)中添加此代码
您可以 select 情节提要中的特定笔尖。 注意 - 将标识符添加到您的 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
}