2016-04-25 3 views
1

У меня есть 3 контроллера вида с двумя кнопками.Дважды нажмите контроллер просмотра

Первый вид:

  1. Следующая (Перейти к контроллеру 2 вида)
  2. End (Перейти к контроллеру 3 вида)

Второй вид:

  1. Назад (Перейдите к контроллеру 1)
  2. Конец (переход к контроллеру 3-го уровня)

Третий вид:

  1. Назад (Перейти к контроллеру 2 вида)
  2. Start (Перейти к контроллеру 1 вид)

Проблема кнопка "назад" из третьего регулятора зрения:

self.navigationController?.popViewControllerAnimated(true) 

Итак, когда я прихожу f во втором представлении нет проблем, я возвращаюсь ко второму виду, но когда я выхожу из первого представления и нажимаю кнопку «Назад», приложение возвращается к первому контроллеру представления, и я хочу перейти ко второму представлению ,

Есть ли способ нажать 2 контроллера просмотра, когда я нажимаю кнопку «Конец» в первом контроллере просмотра, поэтому, когда я нажимаю кнопку «назад» на третьем контроллере, он возвращается ко второму?

Спасибо!

+1

Как вы путешествуете? с performSegueWithIdentifier? – glace

+0

на задней панели 3-го контроллера вы должны проверить, есть ли 2-й контроллер в стеке или нет, если это тогда просто поп, иначе нажмите 2-й контроллер. – Ujesh

+0

В принципе, то, что OP собирается делать, - это недобросовестная практика. Почему с навигационным контроллером на первом месте, когда он хочет перемещаться во всех направлениях? обычно, навигация будет 1-2-3, а затем 3-2-1, а не 2-1-3 или еще – glace

ответ

1

Вы можете нажать несколько контроллеров просмотра, выполнив navigationController.pushViewController(viewControllerN, animated: false) несколько раз и установить animated только для последнего.

1

Вы можете нажать два контроллера вида следующим образом. Убедитесь, что анимированный: false, поэтому пользователь не может определить, что есть два контроллера представления.

let ObjVC1 = UIStoryboard(name: "MainStoryboard", bundle: NSBundle.mainBundle()).instantiateViewControllerWithIdentifier("StoryBoardID") as! Profile 
self.navigationController?.pushViewController(ObjVC1, animated: false) 


let ObjVC2 = UIStoryboard(name: "MainStoryboard", bundle: NSBundle.mainBundle()).instantiateViewControllerWithIdentifier("StoryBoardID") as! Profile 
self.navigationController?.pushViewController(ObjVC2, animated: true) 
+0

Отлично! Он решает мою проблему. Но теперь у меня есть другие. Когда я нажимаю первый раз, я вижу на секунду второй вид. Есть какой-то способ не видеть второй вид, например, я перехожу только к третьему виду? –

0

Простые вы можете нажать несколько контроллеров с помощью экземпляра истории, как указано в другом ответе.

Другим способ (в Objective C - тайный его в стриже !!),

NSMutableArray *controllers = [self.navigationController.viewControllers mutableCopy]; 
[controllers addObject:secondVc]; 
[controllers addObject:thirdVC]; 
[self.navigationController setViewControllers:controllers animated:YES]; 

Позвонив self.navigationController.viewControllers мы получаем массив навигации стеки. мы можем добавить или удалить объект из этого массива и final; y может установить этот массив на навигационный контроллер на [self.navigationController setViewControllers:controllers animated:YES];

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

В соответствии с вашими потребностями в соответствии с вопросом этот подход более подходит, я думаю.

Надеюсь, что это поможет :)