2014-10-31 7 views
1

Я новичок в разработке приложений IOS. У меня есть приложение с 3 видами. Я использую «push segue» для перемещения между ними. Я связал push-сегу от кнопки в первом представлении до второго представления. Для перехода от второго к третьему я не могу иметь кнопку. У меня есть список предметов, и человек может щелкнуть любой из них, чтобы перейти к третьему (и последнему) представлению. Поэтому я добавил segue в раскадровку и называет это программным способом. Третий вид открывается правильно, за исключением того, что nav-bar больше не существует.NavBar не появляется, когда segue называется программно

[self performSegueWithIdentifier: @"moveToFilesSegue" sender: self]; 

Я могу жить без nav-bar. Но реальная проблема заключается в том, что я не могу сделать push-сегу с третьего взгляда на любое другое представление.

Итак, мой вопрос заключается в том, есть ли способ вызвать сегмент со второго взгляда на третий вид таким образом, что на третьем представлении также есть контроллер навигации, который по умолчанию имеют первые два (т.е. навигационная панель также видна в третий сегмент). Существует некоторый перерыв в навигации из-за того, что я называю segue программным путем.

+0

Возможно ли, что ваш переход со второго взгляда на третий вид - это модальный переход? Это объясняет, что навигатор скрывается. – Alex

+0

@Alex ... Нет, это не тот случай. Если я сопоставляю push-сегу с UIButton во втором представлении из раскадровки и нажимаю на кнопку, navBar появляется на третьем представлении. Но когда я вызываю то же самое, программно, navBar исчезает. – thrust

+0

Хорошо, тогда что такое само? Вы вызываете performSegueWithIdentifier из UINavigationController или ViewController второго представления? – Alex

ответ

1

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

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

Чтобы реализовать, сохраните переменную int в первом контроллере представления (btw .. вы можете сделать это, сохранив int в контроллере навигации, если хотите). В viewDidAppear проверьте переменную int. Если он == 1, то нажмите второй контроллер просмотра. Если он == 2, то нажмите третий контроллер. Иначе ничего не делайте. Когда кнопка вошла во второй контроллер представления для просмотра третьего, отключите второй контроллер представления, но в prepareForSegue установите для переменной int в контроллере представления назначения значение 2. Таким образом, когда появляется первый контроллер представления, он сразу же нажимает третий контроллер вида.

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

+0

Да, это немного раздражает ... На данный момент я использую Modal segue и его работу отлично, за исключением анимации (которая, я думаю, я могу изменить) ... Я определенно попробую использовать контроллер панели вкладок ... Но я не хочу перейти на мой 3-й взгляд с 1-го ... Моя навигация простая (1-> 2-> 3) ...Но когда я пытался перейти на 3-й взгляд со второго представления, третий вид не был встроен в контроллер навигации. Большое спасибо за помощь ур – thrust

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