отображать модальное представление при запуске приложения ipad - PullRequest
6 голосов
/ 08 марта 2012

Я хочу условно отобразить экран входа в систему при запуске приложения ipad. Я не хочу делать это частью сеанса по умолчанию, поскольку им нужно входить в систему только периодически, а не каждый раз.

Есть множество примеров моего вопроса, но все они, похоже, предшествуют ios5. Однако когда я использую раскадровки, ничего не получается.

Чтобы свести это к своей сути, * создать новое приложение для одного представления, используя раскадровку * добавить новый viewcontroller в раскадровку, присвоить ему идентификатор «loginScreen» * Поместите текстовую метку в каждом представлении, чтобы визуально отличить их * в приложении Легенд:: 1009 *

- (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 ]

2 голосов
/ 31 июля 2012

@ 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.

2 голосов
/ 16 марта 2012

Оказывается, что приложение не находится в активном состоянии в методе didFinishLaunching.

Правильное место для этого -

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