Пример экрана входа в систему на основе раскадровки

Я изучаю ios/xcode и на дорожном блоке.

У меня есть дизайн на основе tabbarcontroller + navigation. Мне нужно представить экран входа в систему, если пользователь не вошел в систему. Вот основная иерархия. На странице входа в систему требуется навигационная панель (в качестве учебника, которое я выполнил, помещается кнопка "Go" на панели.

LoginController: (LTController.h,.m)

Main View:TabBarController>
                   NavigationController>View1>View1a
                   NavigationController>View2

Storyboard layout

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

Понял бы простое объяснение того, как этого добиться. Эссенциально примечание о том, какие файлы нуждаются в изменениях, было бы замечательно.

спасибо

Ответ 1

Вот сценарий. Это так просто. Я просто надеюсь, что это будет полезно.

enter image description here

Для UITableBarController укажите имя для идентификатора идентификатор раскадровки enter image description here

Затем в вашем файле класса ViewController у вас есть учетные данные аутентификации справa > .? Сделайте кое-что там для аутентификации. затем следуйте этому коду. Он отлично работает

- (IBAction)Login:(id)sender {

    if(authenticated)  // authenticated---> BOOL Value assign True only if Login Success
        {
            UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
            UITabBarController *obj=[storyboard instantiateViewControllerWithIdentifier:@"tab"];
            self.navigationController.navigationBarHidden=YES;
            [self.navigationController pushViewController:obj animated:YES];
        } 

Ответ 2

похоже, что вы в хорошем старте. Поскольку у вас есть дизайн вкладки, вы должны сделать выбор, как представить страницу входа и когда вы это сделаете.

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

Вот общая концепция, которую я бы рекомендовал.

a) создайте постоянную переменную хранилища где-нибудь, чтобы определить, зарегистрирован ли пользователь или нет.

b) добавьте проверку для этого флага в представлении, будет загружать метод первого контроллера представления, прикрепленного к вашей вкладке.

c) представляет собой модальную страницу входа непосредственно из контроллера представления. если они войдут в систему, отлично отпустите его, если нет, они застряли на странице мода.

Итак, вот в основном, как это сделать:

для объяснения, я собираюсь назвать ваш первый контроллер представления - первая вкладка на вашем контроллере таблеток - fviewController - ok?

в fviewController.m

-(void)viewDidLoad {

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    if ([[defaults objectForKey:@"loggedIn"]boolValue]) {
       NSLog(@"user is logged in - do nothing");
    }
   else {

       NSLog(@"User is not logged in");
       [self  performSegueWithIdentifier:@"LoginPage" sender:self];
   }

}

еще пару очков похоже, вы используете раскадровки и segues. В этом случае вы будете делать следующее:

  • создать новый контроллер просмотра для вашей страницы входа.
  • контроль перетащить на него segue-соединение с первого контроллера представления в вашей вкладке
  • идентифицировать segue как "модальный"
  • отображает новый класс контроллера представления для контроллера входа в систему.
  • Представьте свое представление и выполните проверку подлинности.
  • Если пользователь вошел в систему, вам необходимо сохранить его обратно в NSUserDefaults Примечание. Если у вас несколько пользователей или другие схемы, вы можете изменить одно значение, которое я показал вам в примере, чтобы отслеживать статус текущего пользователя. Также: если у вас есть код выхода, вам нужно правильно установить флаг. Кроме того: если пользователи часто будут входить в систему и выходить из системы, то вместо представления загрузится представление view.

Чтобы перевернуть статус:

   NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
   [defaults setValue:[NSNumber numberWithBool:YES] forKey:@"loggedIn"]; //in
   [defaults setValue:[NSNumber numberWithBool:NO] forKey:@"loggedIn"]; //out

   do this in your login controller

Отклонить модальный вид. Технически вы должны использовать обратный вызов делегата для этого, но если вы пытаетесь сохранить все просто, это должно быть нормально

       [self dismissViewControllerAnimated:YES completion:^{

        }];

Итак, ваша логика будет такой: они забыли? Да, затем установите статус YES для входа в систему, а затем уволите. Если они не делают вход в систему, ничего не делайте. Они застревают.

Наконец, если вам нужно настроить свой контроллер входа, вы должны использовать метод: prepareForSegue... для инициализации переменных до того, как произойдет segue. Вероятно, вы читали об этом, если вы делаете несколько уроков.

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

Желаем удачи.