Добавление viewcontrollers в navcontroller с раскадровкой
У меня есть базовая настройка раскадровки, где я загружаю свой NavViewController, который затем указывает на начальный контроллер представления. Затем у меня есть несколько дополнительных контроллеров представления, все из которых последовательно соединяются последовательно через сегменты. Когда я первоначально запускаю свое приложение, я запускаю следующее в моем NavControllerViewController.m
(void)viewDidLoad
{
[super viewDidLoad];
NSArray * controllerArray = [self viewControllers];
NSLog(@"view controllers: %@", controllerArray);
}
В журнале отображается только самый первый корневой контроллер вида (тот, который непосредственно "подключен" к контроллеру nav). Контроллеры всех видов отсутствуют в стеке. У меня сложилось впечатление, что если бы на моей раскадровке был контроллер представления, то он автоматически был бы добавлен к контроллеру навигации?
Если это не правильно, будет ли хорошей альтернативой создание каждого VC из вызывающего VC? Например, если бы я хотел перейти с VC1 на VC2, я бы поместил следующий код в VC1:
UIViewController *vc2 = [self.storyboard instantiateViewControllerWithIdentifier:@"vc2"];
[self pushViewController:vc2 animated:YES];
Или возможно:
[self performSegueWithIdentifier:@"vc2Segue" sender:self];
3 ответа
Все они могут быть доступны для сегментов, но они не создаются и не помещаются в стек, пока вы не перейдете к ним.
Вы можете использовать тактику самостоятельного выполнения, или контроллер push-представления, или, альтернативно, если это происходит в ответ на нажатие одной кнопки, просто управляйте перетаскиванием с этой кнопки на следующий контроллер представления, и XCode выполняет всю остальную работу для тебя.
Если я правильно понимаю ваш вопрос, у вас есть настройка раскадровки, похожая на приведенный ниже снимок экрана. Когда приложение загружает эту раскадровку, у него определенно будет только один контроллер представления в стеке контроллера навигации, и это будет контроллер корневого представления.
Так как other view controllers are still not pushed into the navigation controller stack
,
в Viewcontroller-1
Вы могли видеть кнопку some Action
Я создал push segue
от этой кнопки до Viewcontroller-2
. После того, как вы нажмете эту кнопку, контроллер второго вида будет перемещен в стек контроллера навигации.
Если вы распечатаете viewcontrollers
посчитайте сейчас, вы должны получить счет как 2
,
Повторите то же самое в View Controller-2, теперь вы можете увидеть счетчики 3
, Потому что теперь у нас есть три контроллера представления, помещенных в стек контроллера навигации.
нажмите back
кнопка, чтобы открыть контроллеры представления и видеть, как уменьшается количество контроллеров представления, потому что контроллеры представления теперь удаляются из стека навигационных контроллеров.
Как заявил АдамГ, UIViewController
s не будут помещены в стек, пока вы не перейдете к ним.
Чтобы установить переход, выберите UIViewController
и управление + перетащите соединение к цели UIViewController
, На вкладке "Инспектор атрибутов" установите идентификатор последовательности раскадровки.
Перейти к UIViewController
использовать метод performSegueWithIdentifier:
, До performSegueWithIdentifier:
называется prepareForSegue:sender:
будет называться. Здесь вы можете передать любые значения, которые следующие UIViewController
необходимо. Чтобы проверить, какой вызов вызывается, используйте segue.identifier
недвижимость в prepareForSegue:sender:
, После этого вы можете получить доступ к destinationViewController
имущество.
Если вам нужно вручную создать экземпляр UIViewController
использование instantiateViewControllerWithIdentifer:
, Идентификатор может быть установлен на вкладке Identity Inspector в раскадровке.