2014-09-03 6 views
0

Когда мое приложение запускает:Где я могу поставить логику для загрузки контроллеров представления?

  • Если я вошел, я хочу показать мой основной приложение View Controller
  • Если я не вошли в систему, я хочу показать контроллер представления Войти моего приложения

Оба контроллера находятся на моем раскадровке.

Какова наилучшая практика для этого? Куда идет эта логика?

ответ

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

+0

Спасибо ... @Raptor – VRAwesome

+0

Или вы можете положить его в другом случае. – VRAwesome

2

Вы должны написать этот код в AppDelegate.m «s didFinishLaunchingWithOptions функция

// 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 проверить, если войти в систему, если да, выполнить переход к основному приложению ViewController еще, чтобы войти в ViewController

Надеюсь, это поможет!

+1

Нет, это действительно плохая практика. Вы потеряли память устройства, чтобы загрузить новый бесполезный контроллер просмотра всплесков. Запуск изображений уже выполняет эту работу, и вы можете реализовать свои коды в App Delegate. – Raptor

Смежные вопросы