0

Мне нужно хорошее объяснение, как я могу справиться с UINavigationControllers и UITabBarControllers на iOS6.1 с раскадровки.Как обращаться UINavigationControllers и UITabBarControllers IOS 6.1

  1. Когда я загружаю свое приложение (1-й ViewController), мне нужно, чтобы (FB login = success) он автоматически перескакивает с помощью segues на второй ViewController. Здесь я думаю, что я не могу использовать UINavigationController, как root, HIG для Apple не нравится. image 1
  2. Мне нужен UITabBarController, который подключается к 3 UICollectionViewControllers (по одной вкладке для каждого). Я должен положить UITabBarController как root? Если да, то как я могу обрабатывать другие Viewontrollers между ними? Пример: Image 2
  3. Мне нужен пользовательский BarButtonItem (например, «Удалить все», который вы можете видеть на изображении 2) на каждом CollectionViewController, мне нужно использовать UINavigationController для каждого из них?
+0

Я проверил несколько сайтов, и я думаю, что я не могу иметь '' NavigationBar'before в TabBarController', верно? –

+0

Не рекомендуется иметь TabBarController, содержащийся внутри NavigationController, поскольку он обычно создает запутанный пользовательский интерфейс. Какое отношение имеют четыре кнопки на вашем втором viewController в изображении 1 для вашего контроллера панели вкладок?Есть [Restaurantes, Alojamento, Maps, Favorites] так же, как разделы панели вкладок? Или эти кнопки перемещаются в другом месте? – foundry

+0

Кнопка «Только Избранное» переходит в TabBarController. –

ответ

3

Предположим, вы счастливы использовать разматывать segues (если нет, то есть много способов обойтись).

1 Когда я загружаю свое приложение (1-й ViewController), мне нужно, чтобы (FB login = success) он автоматически перескакивает с помощью segues на второй ViewController. Здесь я думаю, что я не могу использовать UINavigationController, как root, HIG для Apple не нравится.

Вы первый VC (позволяет называть его loginVC) ..
- не должны содержаться в навигационном контроллере.
- должен быть установлен как initialViewController приложения

Ваш второй VC (позволяет называть его ваш startVC)
- должны содержаться в навигационном контроллере
- в удостоверении инспектора, что навигация контроллера, назначить storyboardID: @"InitialNavController"

в вашем App делегатом, давайте иметь свойство loggedIn BOOL:

@property (nonatomic, assign) BOOL loggedIn; 

Теперь в вашем LogIn ViewController ...

В viewDidAppear проверки, чтобы увидеть, если мы уже вошли в систему, если это так, перейдите сразу к вашему startVC:

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 
    if ([(AppDelegate*)[[UIApplication sharedApplication] delegate] loggedIn]) { 
     UINavigationController* navController = 
      [[self storyboard] instantiateViewControllerWithIdentifier:@"InitialNavController"]; 
     [self presentViewController:navController 
          animated:NO 
         completion:nil]; 
    } 
} 

Очень важно, что это находится в viewDidAppear, а не (к примеру) in viewDidLoad - segue не будет работать, если исходное представление не будет правильно инициализировано и на экране.

Сделайте размотку Segue (и объявите ее в loginVC's @interface) ... loginVC будет целевым VC, если пользователи выйдут из системы.

- (IBAction)unwindOnLogout:(UIStoryboardSegue *)segue 
{ 
    [(AppDelegate*)[[UIApplication sharedApplication] delegate] setLoggedIn:NO]; 

} 

(исправлен - удалил эту строку:.
[[self presentedViewController] dismissViewControllerAnimated:YES completion:nil];
нам не нужно увольнять, как переход уже сделал, что за кулисами Это является избыточным и регистрирует сообщение об ошибке)

В других целяхКонтроллеры, в зависимости от ситуации, вы можете сделать кнопку «Выход». CTRL-drag от этой кнопки до символа 'exit' в нижней части ViewController в раскадровке, и вы сможете выбрать этот сегмент в качестве разматывания.

2 Мне нужен UITabBarController, который подключается к 3 UICollectionViewControllers (по одной вкладке для каждого). Я должен установить UITabBarController как root? Если да, то как я могу обрабатывать другие Viewontrollers между ними? Например:

Я думаю, вы пытаетесь выяснить, как tabBarController относится к NavigationController в предыдущем viewController (startVC). Ответ в том, что он не должен - вы действительно не хотите встраивать Tab Bar VC в предыдущий Nav Controller, так как это создаст странные ситуации для дочерних viewControllers панели вкладок.

Навигационная система с началаVC на tabBarVC должна быть через модальный сегмент, а не нажимной сегмент.

Вы можете сделать еще один разматывания SEGUE в startVC для облегчения возвращения из viewControllers ваших tabBarController в:

- (IBAction)unwindToInitialNavFromModal:(UIStoryboardSegue *)segue { 

} 

(исправлен - удалили эту строку: [[self presentedViewController] dismissViewControllerAnimated:YES completion:nil]; этот метод не нуждается в какой-либо контент для выполнения отклонение)

3 Мне нужен пользовательский BarButtonItem (например, «Удалить все» tha t вы можете видеть на изображении 2) на каждом CollectionViewController, мне нужно использовать UINavigationController для каждого из них?

По умолчанию вы не получите панель навигации в своем tabBarVC.

Вы можете указать один из двух способов:
- внедрить каждый элемент childController в свой собственный контроллер навигации;
- вручную перетащите навигационную панель в КАЖДОЙ дочерний элемент viewController.

Либо все в порядке, это действительно зависит от того, хотите ли вы, чтобы навигация на другие ViewControllers.

Затем вы можете добавить barButtonItem слева или справа, чтобы подключиться к разворачивающемуся сегменту initialVC (CTRL-перетащите на символ «exit»).

enter image description here

+0

Я попытаюсь реализовать свои идеи, и тогда я скажу, если это сработает. Спасибо за объяснение. –

+0

Можете ли вы проверить, если вы говорите о чем-то вроде [этого] (http://tinypic.com/r/23i9oqs/6)? –

+0

@FabioCardoso Нет, я следую вашему раскадровке. Проверьте мое обновление, я добавил картинку. – foundry

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