-1

我想在第一次应用程序启动其他明智的应用程序时启动登录屏幕,但问题是它再次进入登录屏幕。

这是我在 didFininsh 中使用的代码

我希望用户只第一次显示进入登录屏幕,下次它应该显示 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;
4

4 回答 4

3

如果您只想显示一次登录屏幕,那么您需要数据库的帮助。

我给出了如何使用数据库表的简单示例。

假设您的表名是 “登录”

在 4 字段中添加登录表

id - 自动公司。
用户名 - 文本;
密码 - 文本;
状态 - 文本,默认 0;

取两个 ViewController

1) 登录视图控制器
2) 主页视图控制器

而在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;
}

在上面的代码中,当你启动你的应用程序时。那时第一次从登录表中检查状态条件。

第一次得到status = 0因为我们把 status 的默认值设置为0所以在这里,

self.window.rootViewController = self.LoginViewController;

那时您在登录屏幕上输入用户名和密码。输入用户名和密码后,您单击登录按钮,此时您还需要触发“登录”表的更新状态查询1

当你再次为你的应用加注星标时,你的状态是 1,所以,

self.window.rootViewController = self.HomeViewController;     

因此,您无法再次显示您的登录屏幕。

于 2013-07-03T09:28:33.563 回答
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;
于 2013-07-03T09:15:25.047 回答
0

您应该在需要跳过的控制器中实现 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];
  }

}

适用于 iOS7

于 2014-03-30T03:47:08.813 回答
-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]];

}
于 2013-07-03T09:15:16.200 回答