我希望在第一次启动其他明智的应用程序工作时启动登录屏幕,但问题是再次进入登录屏幕。
这是我在didFininsh中使用的代码
我希望用户show首次登录登录屏幕,下次应该显示splitViewController
[[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;
答案 0 :(得分:3)
如果您只想显示一次登录屏幕,那么您需要帮助数据库。
我给出了如何使用数据库表的简单示例。
假设您的表名是“登录”
在4个字段中添加登录表
id - auto-inc。
用户名 - TEXT;
密码 - TEXT;
status - TEXT,默认为0;
拿两个ViewController
1)LoginViewController
2)HomeViewController
并在application:didFinishLaunchingWithOptions
- (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;
}
在上面的代码中,当你启动app时。当时第一次从登录表中查看状态的条件。
你第一次得到 status = 0 因为我们把状态的默认值设为 0 所以这里,
self.window.rootViewController = self.LoginViewController;
此时您在登录屏幕上输入userName和Password。 在输入用户名和密码后,您点击登录按钮,此时您还需要点击查询更新状态 '登录'表 1
当你再次为应用程序加注星标时,你状态为1 所以,
self.window.rootViewController = self.HomeViewController;
因此,您无法再次显示登录屏幕。
答案 1 :(得分:0)
if (![[NSUserDefaults standardUserDefaults] boolForKey:@"firstLaunch"]) {
[self.window addSubview:[splitViewController view]];
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"firstLaunch"];
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;
答案 2 :(得分:0)
您应该在Controller中实现需要跳过的viewDidAppear方法,然后在viewDidAppear方法中,对要发送给用户的视图执行segue,如下所示:
- (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];
}
}
for ios7
答案 3 :(得分:-1)
试试这个......
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]];
}