2012-01-27 56 views
7

我有一個使用故事板開發的ios5應用程序,當前在初始啓動時顯示標籤欄控制器視圖。我想在顯示標籤欄控制器之前顯示一個登錄屏幕。用戶將輸入他的用戶名密碼&,然後系統將認證用戶,然後如果成功,顯示標籤欄控制器。在標籤欄控制器顯示之前啓動登錄視圖

我已經嘗試了以下3個選項,沒有運氣..任何想法?

(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 

    // Option 1 
    UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController; 
    PointsViewController *firstVC = [[tabBarController viewControllers] objectAtIndex:0]; 
    UIViewController *loginViewController = [[LoginViewController alloc] init]; 
    [firstVC.navigationController pushViewController:loginViewController animated:YES]; 

    // Option 2 
    UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController; 
    UIViewController *loginViewController = [[LoginViewController alloc] init]; 
    [tabBarController presentViewController:loginViewController animated:NO completion:nil]; 

    // Option 3 
    UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController; 
    UIViewController *loginViewController = [[LoginViewController alloc] init]; 
    [tabBarController presentModalViewController:loginViewController animated:NO]; 

    return YES; 
} 

回答

18

終於想通這一個..這裏是你需要做什麼:

  1. 添加一個獨立的登錄視圖故事板。

  2. 選擇登錄視圖,並在屬性檢查器中檢查'是初始視圖控制器'。這會將正在啓動的初始視圖從選項卡控制器切換到登錄視圖,從而解決首先顯示登錄屏幕的整個問題。

  3. 在登錄視圖中添加一個按鈕,並創建一個按鈕來按下按鈕時加載選項卡控制器。 (或者,您可以從登錄視圖創建一個segue到標籤控制器視圖,並根據需要以編程方式調用segue)。

  4. 選擇登錄視圖和選擇選項編輯>嵌入>導航控制器

  5. 在屬性檢查器的導航控制器,取消選中「顯示導航欄」選項(這是一個外觀上的改變;我假設你並不需要顯示在登錄屏幕上的導航條!)

就是這樣:)

+0

如何使用segue將值傳遞給標籤欄的firstviewcontroller?我無法得到它的工作 – meda 2013-03-05 16:32:41

+0

你不會傳遞一個價值與segue。一種可能的選擇是將您想要傳遞的值作爲屬性存儲在您的AppDelegate中,並從目標視圖中訪問該值。 – 2013-03-06 02:28:11

+0

它的工作原理!但如果密碼不正確,如何禁用推送到新窗口? – Gank 2014-11-13 08:44:24

0

您可以使用模態視圖。您可以檢查用戶是否已登錄。如果不是,則可以使用模態視圖獲取登錄信息。您可以在故事板中創建UIViewController,然後使用instantiateViewControllerWithIdentifier:方法從故事板創建登錄屏幕。然後簡單地以模態顯示。

+0

你會在哪裏啓動模式窗口?第一個標籤的viewDidAppear方法?有沒有一種方法可以在加載標籤之前啓動模態窗口? – 2012-01-27 20:02:10

+0

如果您希望在渲染事物之前顯示它,那麼您將使用viewWillAppear進行檢查並啓動模態視圖。一旦你模態地打開一個新的視圖控制器/視圖,處理等待,直到模態視圖關閉。該方法將位於選項卡控制器的根視圖控制器中,而不是選項卡控制器。如果需要,可以將它放置到您的每個Tab控件的根視圖控制器中,或者您可以對UIViewControl進行子類化併爲每個控件使用它。 – Rob 2012-01-28 04:14:16

+1

我試過了。我看到發生的事情是,最初的選項卡被加載,然後模態窗口覆蓋在它的頂部。在視覺上這不令人愉悅。我希望用戶先看到登錄窗口。我從第一個選項卡上的viewWillAppear方法啓動了登錄視圖。這是我的代碼的樣子。

 - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; // Display the login view modally [self performSegueWithIdentifier:@"ShowLogin" sender:self]; }
2012-02-02 03:23:08

0

我剛纔遇到了這個問題,我已經完全通過添加以下代碼,您也沒有使用解決了這個。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    ... 
    [self.window makeKeyAndVisible]; 
} 
相關問題