2016-09-01 3 views
0

Как показано на фотографии ниже, у меня есть контроллер TabBar в качестве контроллера корневого представления с подключенным контроллером навигации. В моих VC1 и VC2 у меня есть панель вкладок и панель навигации на экране, что и я хочу. Однако для VC3 мне не нужна панель вкладок. В настоящее время я просто скрываю и открываю табуляцию при просмотре. Однако это привело к некорректному интерфейсу пользователя. Я думаю, что было бы замечательно, когда я представляю VC3, он просто представляет «поверх» текущего экрана, сохраняя панель навигации. Можно ли это сделать? Мне также хотелось бы, чтобы презентация была справа налево, как и в виде сеге (как противопоставить показаться снизу)Segue to VC over TabBar

Примечание. Я использую performSegueWithIdentifier для перехода на VC3

Я видел какое-то решение, где я должен установить rootVC вместо обычного контроллера вида (логин VC в моем случае). Однако я стараюсь избегать этого, потому что, если пользователь уже вошел в систему, мне не нужно вводить логин. Если у меня есть это как мой rootVC все время, пользователь будет вынужден загружать и «видеть» регистрацию VC сначала, прежде чем увидеть tabBarVC. Это вызовет. Разве есть способ избежать этого?

storyboard flow

+0

Эдвард висел брата проверить мой ответ относительно уже введенного в систему или нет – user3182143

ответ

1

ПЕРВЫЙ ПУТЬ: PUSH Вы можете скрыть нижнюю панель на толчке, позволяя флаг VC3 из раскадровки.

Пожалуйста, обратитесь следующую картину:

enter image description here

Второй способ: НАСТОЯЩЕГО

Установка навигации контроллер для VC3 и представить, что навигация контроллер от VC1 или VC2 или TabBar, как показано на следующем изображении:

enter image description here

+0

Я пробовал первый способ и не понравился, как когда VC3 показывает, панель вкладок все еще существует на короткое мгновение, затем она прячется. Для второго варианта, когда я привязал две стрелки от VC1 и VC2 к NavVC справа, то navVC автоматически поставляется с tabBar (с помощью push-сегмента). Итак, у моего VC 3 все еще есть панель вкладок внизу – user172902

+0

во втором способе, которым вы должны использовать настоящее .... Нет толчка ... Я упомянул в ответе .... –

+0

Это или нет? –

0

Вы можете создать новое окно, th en представит ваш VC3 на нем, это обеспечит его за вкладку в обмен на создание нового контроллера навигации и поддельной кнопки. Но я бы предпочел проверить опцию hide tabbar on push в раскадровке, это дает вкладке скрытие приятной анимации.

Для вашего второго вопроса лучший способ - сделать rootVC в раскадровке контроллером панели и отделить loginVC в AppDelegate, проверьте вход пользователя или нет и установите rootVC для входа в систему управления VC или табулятором

+0

Не могли бы вы предоставить некоторый пример кода для «Вы можете создать новое окно, а затем представить свой VC3 на нем, это обеспечит его за вкладку в обмен на создание нового контроллера навигации и поддельную кнопку« Я попробовал что-то вроде этого, но VC был представлен снизу экрана. И я не знал, как добавить навигационную панель для этого VC программно. Спасибо – user172902

+0

Я думаю, что вы уже пробовали, тогда у вас появилась идея о том, как это сделать, просто измените ее немного, вместо того, чтобы представлять VC прямо сейчас, вы представляете невидимый VC первый (без анимации), а затем нажмите на этот VC3, я только делал это раньше, но без навигационной панели, все еще против этого, вместо того, чтобы просто найти способ скрыть вашу вкладку вместо этого сложнейшего способа. – Tj3n

0

При первом входе в систему вы должны установить контроллер корневого представления в качестве контроллера входа в систему. Затем в методе viedDidLoad вам необходимо установить флажок, уже зарегистрированный в или нет. При первом запуске приложения он не зашел в систему, поэтому вы можете перейти на страницу входа. После того, как вы вошли в систему, вы можете перейти на следующую страницу напрямую. Вы можете использовать метод LoginViewController viewDidLoad.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    BOOL loggedIn = [[NSUserDefaults standardUserDefaults] boolForKey:@"logged_in"]; 
    if(loggedIn) 
    { 
    NSLog(@"It has already logged in so go to next view"); 
    } 
} 

При входе в систему успешно установить логическое значение в YES

- (IBAction)actionLoggin:(id)sender 
{ 
    if ([strUsername isEqualToString:@"xxxxxx"] && [strPassword isEqualToString:@"xxxxxx"]) //If it is correct 
    { 
     [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"logged_in"]; 
    } 
} 

Затем, когда вы выйдите из системы, установить логическое значение для NO

- (IBAction)actionLoggin:(id)sender 
{ 
    [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"logged_in"]; 
} 
+0

Я попытался установить мой loginVC как мой rootVC и в самой первой строке viewDidLoad, я проверяю если в NSuserdefault есть какие-либо пользовательские данные. Если он существует, выполните функцию TabBarVC. Однако это не работает, потому что я не могу выполнить segue в viewDidLoad. Я не хочу, чтобы пользователь должен был видеть loginVC, если он не вышел из системы. – user172902

0

1> Для панели вкладок можно удалить TabBar или вы можете скрыть вкладку из раскадровки, но не берете отдельный контроллер навигации для VC3.

Вы можете держали NavBar пункт заголовка значение VC3 в VC2 или VC1 NavBar титул толкая или представления VC3.For, что вы должны пользователя performseguewithidentifier и инициализирует VC3 nabber пункт значения заголовка

2> Hey для пользователя уже логин, а затем в appdelgate вы можете изменить контроллер корневого представления. Поиск пользователя вошел в систему или нет по умолчанию пользователя.

вы можете изменить rootviewcontroller, используя window.rootviewcontroller, и при этом вы снова можете изменить rootviewcontroller.

Смежные вопросы