2012-01-27 2 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 из окна входа в представление контроллера табуляции и программным образом вызывать segue по мере необходимости).

  4. Выберите вид входа в систему и выберите Редактор опций> Вставить в> Навигационный контроллер

  5. В инспекторе атрибутов для навигации контроллера, снимите флажок «показывает навигационную панель» вариант (это косметическое изменение, я если вам не нужна панель навигации, показывая на экране входа в систему !!)

Вот это :)

+0

Как передать значение первому контроллеру панели вкладок с помощью segue? Я не мог заставить его работать – meda

+0

, вы не передадите значение с помощью segue. Один из возможных вариантов - сохранить значение, которое вы хотите передать как свойство в AppDelegate, и просто получить доступ к значению из целевого представления. –

+0

Он работает! Но как отключить нажатие на новое окно, если пароль неверен? – Gank

0

Вы можете использовать модульный вид. Вы можете проверить, вошел ли пользователь в систему. Если нет, вы можете использовать модальное представление, чтобы получить информацию для входа. Вы можете создать UIViewController в раскадровке, а затем использовать метод instantiateViewControllerWithIdentifier: для создания экрана входа в раскадровку. Тогда просто покажите это модально.

+0

И откуда бы вы запустили модальное окно? Метод viewDidAppear первой вкладки? Есть ли способ запустить модальное окно перед загрузкой вкладок? –

+0

Если вы хотите, чтобы он отображался до того, как все будет визуализировано, вы будете использовать viewWillAppear для проверки и запуска модального представления. После того, как вы модально откроете новый контроллер представления/просмотрите обработку, подождите, пока модальный вид не будет закрыт. Этот метод будет находиться в контроллере корневого представления контроллера табуляции, а не на контроллере табуляции. При необходимости это можно поместить в каждый из контроллеров корневого представления вашего элемента управления вкладками или вы можете подклассифицировать UIViewControl и использовать его для каждого. – Rob

+1

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

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

0

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

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    ... 
    [self.window makeKeyAndVisible]; 
} 
Смежные вопросы