У меня есть две раскадровки. Первый используется для отображения пароля. Он имеет два контроллера представления и собственный контроллер навигации. Вторая раскадровка содержит контроллеры представления для приложения, а также контроллер навигации. Пользователь должен вводить пароль каждый раз, когда запускает приложение, если он не отключит его в настройках.
Вот мой AppDelegate.m:
- (void)startApp
{
// Override point for customization after application launch.
if ([Security getUseOrNotPassword] || (NO == [Settings isNotFirstAppRun]) )
[self showLoginScreen];
else
[self showMainVC];
}
-(void)showLoginScreen
{
if (NO == [Settings isNotFirstAppRun])
[Settings setDefaultLanguage];
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Password" bundle:nil];
PasswordVC *passwordView = [storyboard instantiateViewControllerWithIdentifier:@"Login"];
if (NO == [Settings isNotFirstAppRun] )
{
passwordView = [passwordView initForAction:PasscodeActionSet];
[Security saveUseOrNotPassword:YES];
}
else
{
passwordView = [passwordView initForAction:PasscodeActionEnter];
passwordView.passcode = [Security getPassword]; //pass password to verify
}
passwordView.delegate = self;
UINavigationController *navigationController= [[UINavigationController alloc] initWithRootViewController:passwordView];
[[(AppDelegate*)[[UIApplication sharedApplication] delegate] window] setRootViewController:navigationController];
[self.window makeKeyAndVisible];
}
-(void)showMainVC
{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
MainTableVC *mainVC = [storyboard instantiateViewControllerWithIdentifier:@"main"];
LeftMenuVC *menuVC = [storyboard instantiateViewControllerWithIdentifier:@"leftMenu"];
RevealVC *mainRevealController = [[RevealVC alloc] initWithRearViewController:menuVC frontViewController:mainVC];
UINavigationController *navigationController= [[UINavigationController alloc] initWithRootViewController:mainRevealController];
[[(AppDelegate*)[[UIApplication sharedApplication] delegate] window] setRootViewController:navigationController];
}
Вот метод делегирования из Password: если пользователь вводит "правильный" пароль, открывается главный экран:
- (void)PasswordVCDidEnterPasscode:(PasswordVC *)controller
{
[self.window.rootViewController dismissViewControllerAnimated:YES completion:nil];
[self performSelector:@selector(showMainVC) withObject:nil afterDelay:0.1];
}
И, наконец, отображение пароля каждый раз, когда приложение становится активным
- (void)applicationDidBecomeActive:(UIApplication *)application
{
// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
[self startApp];
}
Мой вопрос: в этой схеме для отображения формы пароля как показать последний контроллер представления пользователя, в котором он что-то набрал и данные в нем (текст в текстовых полях и т. д.)? Потому что если пользователь нажмет кнопку «Домой» и после запуска приложения все данные исчезнут и появится главный экран приложения=) Может быть, мне стоит изменить алгоритм отображения формы пароля? Спасибо за ответ и советуем! Приятного программирования!)