Предположим, вы счастливы использовать разматывать 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»).
Я проверил несколько сайтов, и я думаю, что я не могу иметь '' NavigationBar'before в TabBarController', верно? –
Не рекомендуется иметь TabBarController, содержащийся внутри NavigationController, поскольку он обычно создает запутанный пользовательский интерфейс. Какое отношение имеют четыре кнопки на вашем втором viewController в изображении 1 для вашего контроллера панели вкладок?Есть [Restaurantes, Alojamento, Maps, Favorites] так же, как разделы панели вкладок? Или эти кнопки перемещаются в другом месте? – foundry
Кнопка «Только Избранное» переходит в TabBarController. –