2015-09-11 4 views
3

Мое приложение имеет 7 следующих контроллеров вида: VC1 - VC7
В моей навигационной панели у меня есть кнопка возврата с действиями: постукивание и длительное нажатие. Когда backButton нажимается долго в любом VC, приложение должно перейти на VC2 и представить его так, как если бы пользователь перешел от VC1 к VC2, в частности: с нажатием правой кнопки мыши.Как вернуться в стек навигации?

Это мой код для UILongPressGestureRecognizer:

func longPressAction(gestureRecognizer: UIGestureRecognizer) { 

    if (gestureRecognizer.state == UIGestureRecognizerState.Ended) { 

     println("Long press ended") 

    } else if (gestureRecognizer.state == UIGestureRecognizerState.Began) { 

     println("Long press detected") 

     let mainStoryboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle()) 
     let vc: ViewController2 = mainStoryboard.instantiateViewControllerWithIdentifier("vc2") as! ViewController2 
     navigationController?.pushViewController(vc, animated: true) 

    } 

} 

Как я могу вернуться в нужное место в навигации стека?

ответ

3

Вы можете задать массив View Controllers в навигационном контроллере:

let viewControllersArray = [VC1,VC2] 
self.navigationController.setViewControllers(viewControllersArray, animated: true) 

EDIT

в вашем сценарии

else if (gestureRecognizer.state == UIGestureRecognizerState.Began) { 

    println("Long press detected") 

    let mainStoryboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle()) 
    let vc1: ViewController1 = mainStoryboard.instantiateViewControllerWithIdentifier("vc1") as! ViewController1 
    let vc2: ViewController2 = mainStoryboard.instantiateViewControllerWithIdentifier("vc2") as! ViewController2 
    let VCArray = [vc1,vc2] 
    self.navigationController.setViewControllers(VCArray, animated: true) 
} 
0

Я могу думать о двух способов сделать это :

  1. Установите VC2 в качестве вашего корневого контроллера и затем используйте popToRootViewControllerAnimated. Его чистая ИМО, если VC2 - ваш основной контроллер, который так часто называется.

  2. Поддерживает логическое обозначение, если VC2 уже загружен в стек. Если загружен, просто используйте popToViewController, а если еще не загрузили в память, то только pushViewController и нажмите VC2.

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