當我的應用程序啓動:我在哪裏放邏輯來加載視圖控制器?
- 如果我登錄,我想告訴我的主要應用視圖控制器
- 如果我沒有登錄,我想告訴我的應用程序的登錄視圖控制器
這兩個控制器都出現在我的故事板上。
這樣做的最佳做法是什麼?這段邏輯去哪裏了?
當我的應用程序啓動:我在哪裏放邏輯來加載視圖控制器?
這兩個控制器都出現在我的故事板上。
這樣做的最佳做法是什麼?這段邏輯去哪裏了?
實現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;
}
您必須編寫的代碼AppDelegate.m
的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記錄。
您可以擁有它,以便登錄視圖控制器是初始視圖控制器。如果他們已經登錄,那麼在viewWillAppear方法中,您可以繼續訪問其他視圖控制器。
這個邏輯是最適合在此的viewController飛濺的viewController(basicly具有在整個屏幕上圖片的屏幕) 你是否登錄,如果是執行SEGUE到主應用程序的ViewController 否則,登陸的ViewController
希望這有助於!
號這是一個非常不好的做法,設置爲TRUE。您浪費了設備內存來加載新的無用閃屏視圖控制器。啓動圖像已經在完成這項工作,您可以在App Delegate中實現您的代碼。 – Raptor 2014-09-03 06:40:13
一個小改進:通過首先確定「IS_LOGIN」來保存加載雙視圖控制器的內存,然後加載'rootViewController'。在你的代碼中,如果'isLogin'爲'YES',則'storyboard instantiateViewControllerWithIdentifier:'被調用兩次。 – Raptor 2014-09-03 06:42:55
謝謝...... @Raptor – VRAwesome 2014-09-03 10:00:15
或者你可以把它放在別的情況下。 – VRAwesome 2014-09-03 10:01:02