在ipad应用程序启动时显示模态视图

时间:2012-03-08 17:14:12

标签: ios5 uiapplicationdelegate presentmodalviewcontroller uistoryboard

我想在启动ipad应用时有条件地显示登录屏幕。我不想让它成为默认segue的一部分,因为它们只需要定期登录,而不是每次都登录。

我的问题有numerous examples,但它们似乎都早于ios5。但是,当我使用故事板时,似乎没有任何效果。

为了减少这个本质,  *使用故事板创建一个新的单一视图应用程序  *添加一个新的viewcontroller到storyboard,给它一个标识符“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 个答案:

答案 0 :(得分:2)

事实证明,应用程序在didFinishLaunching方法中未处于活动状态。

放置它的适当位置是

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

答案 1 :(得分: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。