2013-05-27 50 views
-2

我有這樣的故事板:跳過觀點,如果用戶已經登錄

storyboard

第二的ViewController是登錄屏幕。

我檢查用戶是否已經登錄,如果它是真的,我想跳過登錄屏幕並轉到tableviewcontroller。另一方面,當用戶沒有登錄時,顯示登錄視圖,並且當用戶進行登錄時,我希望下一個視圖成爲導航堆棧中的第一個視圖。

現在我設定的tableview與此代碼的根元素在其他崗位

NSMutableArray *viewControllers = [NSMutableArray arrayWithArray:[self.navigationController viewControllers]]; 
InitialViewController *nvc = [[InitialViewController alloc] init]; 
[viewControllers replaceObjectAtIndex:0 withObject:nvc]; 
[self.navigationController setViewControllers:viewControllers]; 

它的工作原理解釋,但是當我想使一個原因請看詳細的單元格點擊查看它doesn」工作。如果我刪除登錄屏幕,並在導航控制器中設置表格視圖爲根。

任何人都知道爲什麼?

跳過登錄視圖的其他方式被理解

編輯: 利用此解決方案它的工作原理,現在我有兩個導航控制器和I從一個改變到另一個與此代碼

UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:[NSBundle mainBundle]]; 
InitialViewController *initial = [storyBoard instantiateViewControllerWithIdentifier:@"appRootController"]; 
AppDelegate *myAppDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate]; 
myAppDelegate.window.rootViewController = initial; 

我不知道這是否是正確的解決方案,但它的工作原理。

+0

你打電話給那個塞格?你確定你在代碼和故事板中都使用了相同的segue id嗎? – marzapower

+0

我沒有調用segue,我用導航控制器的根元素替換了「初始視圖控制器」中的「Login View Controller」 – jramillete

回答

7

我需要一次,正是你現在需要的東西。我做的是一旦用戶登錄,我在NSUserDefaults設置適當的值。然後在我的AppDelegate.m,我檢查NSUserDefaults值,以確定用戶在

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法

然後我設置RootViewController的適當的視圖控制器已經登錄。當您使用的故事板,我還能做什麼是創造你的故事板的實例如下:

UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"YourStoryBoardName" bundle:[NSBundle mainBundle]]; 

然後使用NSUserDefaults檢查用戶信息。

 // Check user login 
     if([[NSUserDefaults standardUserDefaults] valueForKey:@"AlreadyLogin"]) 
     { 
      // So, here user already login then set your root view controller, let's say `SecondViewController`` 
      SecondViewController *secondViewController = [storyBoard instantiateViewControllerWithIdentifier:@"SecondViewController"]; 
      // then set your root view controller 
      self.window.rootViewController = secondViewController; 
     } 
    else 
    { 
     // It means you need to your root view controller is your login view controller, so let's create it 
     LoginViewController *loginViewController= [storyBoard instantiateViewControllerWithIdentifier:@"LoginViewController"]; 
     self.window.rootViewController = loginViewController; 
    } 

不要忘記設置您的視圖控制器識別到合適的值,那麼不要忘記清除NSUserDefaults值,當用戶註銷。

+0

感謝您的回答,但是如果我這樣做,導航控制器將消失 – jramillete

+0

只需將新控制器包裝在導航控制器中:'UINavigationController * navController = [[UINavigationController alloc] initWithRootViewController:loginViewController]; self.window.rootViewController = navController;' – marzapower

+1

我試過這樣做,並使用故事板中的導航控制器,但是,如果我在appdelegate中進行了更改,但不能從視圖中進行更改。它顯示導航控制器,但賽格停止工作。 – jramillete

相關問題