2014-09-03 77 views
0

當我的應用程序啓動:我在哪裏放邏輯來加載視圖控制器?

  • 如果我登錄,我想告訴我的主要應用視圖控制器
  • 如果我沒有登錄,我想告訴我的應用程序的登錄視圖控制器

這兩個控制器都出現在我的故事板上。

這樣做的最佳做法是什麼?這段邏輯去哪裏了?

回答

3

實現didFinishLaunching方法是這樣的:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    // Override point for customization after application launch. 
    self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds]; 

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
    UIViewController *rootViewController = [storyboard instantiateViewControllerWithIdentifier:@"LoginView"]; 

    BOOL isLogin = [[NSUserDefaults standardUserDefaults] boolForKey:@"IS_LOGIN"]; 
    if (isLogin == YES) 
    { 
     rootViewController = [storyboard instantiateViewControllerWithIdentifier:@"MainHomeView"]; 
    } 
    self.window.rootViewController = rootViewController; 
    [self.window makeKeyAndVisible]; 

    return YES; 
} 

而當你按下登錄按鈕

- (IBAction)login:(id)sender 
{ 
    [[NSUserDefaults standardUserDefaults] setBool:TRUE forKey:@"IS_LOGIN"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 

    HomeViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"MainHomeView"]; 
    AppDelegate *appDelagate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
    appDelagate.window.rootViewController = vc; 
} 
+1

一個小改進:通過首先確定「IS_LOGIN」來保存加載雙視圖控制器的內存,然後加載'rootViewController'。在你的代碼中,如果'isLogin'爲'YES',則'storyboard instantiateViewControllerWithIdentifier:'被調用兩次。 – Raptor 2014-09-03 06:42:55

+0

謝謝...... @Raptor – VRAwesome 2014-09-03 10:00:15

+0

或者你可以把它放在別的情況下。 – VRAwesome 2014-09-03 10:01:02

2

您必須編寫的代碼AppDelegate.mdidFinishLaunchingWithOptions功能

// Check if user is logged in 
    if ([[NSUserDefaults standardUserDefaults] stringForKey:@"loggedIn"] == NULL || [[[NSUserDefaults standardUserDefaults] stringForKey:@"loggedIn"] isEqualToString:@"false"]) { 
     // show login page 
     UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 

     UIViewController *mainViewController = [storyboard instantiateViewControllerWithIdentifier:@"login"]; 

     self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
     self.window.rootViewController = mainViewController; 
     [self.window makeKeyAndVisible]; 
    } else { 

     // show home page 
     UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
     UIViewController *mainViewController = [storyboard instantiateViewControllerWithIdentifier:@"home"]; 

     self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
     self.window.rootViewController = mainViewController; 
     [self.window makeKeyAndVisible]; 
    } 

在這裏,你將有當用戶登錄在NSUserDefaults設定值,如果用戶沒有在顯示loginVC其他homeVC記錄。

1

您可以擁有它,以便登錄視圖控制器是初始視圖控制器。如果他們已經登錄,那麼在viewWillAppear方法中,您可以繼續訪問其他視圖控制器。

0

這個邏輯是最適合在此的viewController飛濺的viewController(basicly具有在整個屏幕上圖片的屏幕) 你是否登錄,如果是執行SEGUE到主應用程序的ViewController 否則,登陸的ViewController

希望這有助於!

+1

號這是一個非常不好的做法,設置爲TRUE。您浪費了設備內存來加載新的無用閃屏視圖控制器。啓動圖像已經在完成這項工作,您可以在App Delegate中實現您的代碼。 – Raptor 2014-09-03 06:40:13

相關問題