Ios 如何仅在应用程序启动时第一次显示登录屏幕
我想在应用程序第一次启动其他wise应用程序时启动登录屏幕,但问题是它再次进入登录屏幕 下面是我在didFininsh中使用的代码 我希望用户只在第一次显示go to login屏幕,下次它应该显示splitViewControllerIos 如何仅在应用程序启动时第一次显示登录屏幕,ios,ipad,launching-application,Ios,Ipad,Launching Application,我想在应用程序第一次启动其他wise应用程序时启动登录屏幕,但问题是它再次进入登录屏幕 下面是我在didFininsh中使用的代码 我希望用户只在第一次显示go to login屏幕,下次它应该显示splitViewController [[NSUserDefaults standardUserDefaults] registerDefaults:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YE
[[NSUserDefaults standardUserDefaults] registerDefaults:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES],@"firstLaunch",nil]];
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"firstLaunch"]) {
[self.window addSubview:[splitViewController view]];
LoginViewController *targetController = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil];
targetController.modalPresentationStyle = UIModalPresentationFullScreen;
[self.splitViewController presentViewController:targetController animated:YES completion:nil];
}
else {
[self.window addSubview:[splitViewController view]];
}
// my comment[window addSubview:splitViewController.view];
[window makeKeyAndVisible];
return YES;
试试这个
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"firstLaunch"]) {
[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"firstLaunch"];
[self.window addSubview:[splitViewController view]];
LoginViewController *targetController = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil];
targetController.modalPresentationStyle = UIModalPresentationFullScreen;
[self.splitViewController presentViewController:targetController animated:YES completion:nil];
}
else {
[self.window addSubview:[splitViewController view]];
}
若您只想显示一次登录屏幕,那个么您需要数据库的帮助 我给出了如何使用数据库表的简单示例 假设您的表名为“Login” 在4字段中添加登录表 id-汽车公司
用户名-文本
密码-文本
状态-文本,默认为0 拿两个ViewController 1) 登录查看控制器
2) HomeViewController
[[NSUserDefaults standardUserDefaults] registerDefaults:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES],@"firstLaunch",nil]];
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"firstLaunch"]) {
[self.window addSubview:[splitViewController view]];
LoginViewController *targetController = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil];
targetController.modalPresentationStyle = UIModalPresentationFullScreen;
[self.splitViewController presentViewController:targetController animated:YES completion:nil];
}
else {
[self.window addSubview:[splitViewController view]];
}
// my comment[window addSubview:splitViewController.view];
[window makeKeyAndVisible];
return YES;
在应用程序中:使用选项完成启动
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
/// here you need to get status from "Login" table
if (status == 0)
{
/// code of initialize LoginViewController
self.window.rootViewController = self.LoginViewController;
}
else if (status == 1)
{
/// code of initialize HomeViewController
self.window.rootViewController = self.HomeViewController;
}
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}
在上面的代码中,当您启动应用程序时。当时第一次从登录表中检查状态的条件
第一次得到状态=0时,因为我们将状态的默认值设置为0,所以这里
self.window.rootViewController = self.LoginViewController;
此时,在登录屏幕上输入用户名和密码。
输入用户名和密码后,单击登录按钮,此时还需要对您的“登录”状态进行更新查询,表为1
当您再次启动应用程序时,您的ger状态为1
self.window.rootViewController = self.HomeViewController;
因此,您不能再次显示登录屏幕。您应该在需要跳过的控制器内实现viewDidAppear方法,然后在viewDidAppear方法中,依次执行要向用户发送的视图,如下所示:
- (void)viewDidAppear:(BOOL)animated {
//if user is already logged in then skip to welcome view
//implement your login method here
if ([self isUserLoggedIn]) {
[self performSegueWithIdentifier:@"WelcomeTo" sender:self];
}
}
对于ios7签出,我认为您必须将该代码写入视图。谢谢,它可以工作,但我希望当用户输入用户名时,它会在appDelegate.userName中通信,那么我如何将其存储在NSUserDefaults中,以便下次打开应用程序时,它应该在userName[[NSUserDefaults standardUserDefaults]setBool:NO forKey:@“firstLaunch”]中取值;成功登录后,您只需设置用户默认值。我可以在LoginViewController中设置用户默认值。成功登录后&从app delegate中删除该代码。