6

我想在啓動ipad應用程序時有條件地顯示登錄屏幕。我不想讓它成爲默認的segue的一部分,因爲他們只需要定期登錄,而不是每次登錄。顯示ipad應用程序啓動時的模式視圖

有我的問題numerousexamples,但他們似乎都早於ios5。然而,當我使用故事板時,似乎沒有任何工作。

爲了減少這種以它的本質, *創建一個新的單一視圖的應用程序,用故事板 *添加一個新的視圖控制器到故事板,給它的「loginScreen」 *標識符把文本標籤上的每個視圖直觀地區分它們。 *中的appDelegate:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    UIStoryboard *storyboard = [self.window.rootViewController storyboard]; 
    UIViewController *loginController = [storyboard instantiateViewControllerWithIdentifier:@"loginScreen"]; 
    [self.window.rootViewController presentModalViewController:loginController animated:TRUE]; 

    return YES; 
} 

從我所看到的例子,應該工作。但它始終顯示原始的rootViewController視圖。雖然沒有錯誤。

任何人都可以指出我錯過的(可能很小)的東西嗎?

回答

2

事實證明,該應用程序在didFinishLaunching方法中未處於活動狀態。

適當地方放這是

- (void)applicationDidBecomeActive:(UIApplication *)application 
{ 
    UIStoryboard *storyboard = self.window.rootViewController.storyboard; 
    UIViewController *loginController = [storyboard instantiateViewControllerWithIdentifier:@"loginScreen"]; 
    [self.window.rootViewController presentModalViewController:loginController animated:NO]; 
} 
2

@deafgreatdane:您的解決方案將每一個應用程序成爲從在後臺狀態(其可以是所期望的)活動時間呈現所述視圖控制器模態。

在我的情況(使用它來顯示一個一次性的啓動屏幕)我想補充一個dispatch_once於該解決方案,以確保該模式啓動屏幕只顯示一次:

- (void)applicationDidBecomeActive:(UIApplication*)application 
{ 
    static dispatch_once_t onceToken; 

    dispatch_once(&onceToken,^
       { 
        SomeLaunchViewController* launchViewController = [[SomeLaunchViewController alloc] init]; 
        [self.window.rootViewController presentViewController:launchViewController animated:NO completion:NULL]; 
       }); 
} 

這代碼片段使用ARC。

相關問題