2016-04-15 5 views
-4

Я использую следующую функцию для перемещения назад к предыдущему контроллеруПеремещение Назад к предыдущему контроллеру

- (void) onBack:(id) sender { 
    [[self navigationController] popViewControllerAnimated:NO]; 
} 

Она работает нормально в нормальной ситуации, но проблема возникает, когда я Гото более 1 ViewController.

Если я перехожу от Viewcontroller1 к ViewController2 затем Viewcontroller3

От Viewcontroller3 если я нажимаю BackButton, речь идет о ViewController2, еще раз, если я Гото ViewController3 и вернуться к Viewcontroller2. Из ViewController2, если я нажму кнопку назад, он должен перейти в ViewController1, вместо этого он будет ViewController3

Может ли кто-нибудь помочь мне решить эту проблему.

Я использую следующий код для перехода от одного контроллера к другому (только один образец)

[[NSNotificationCenter defaultCenter] addObserverForName:NotificationEditProfile 
    object:nil 
    queue:[NSOperationQueue mainQueue] 
    usingBlock:^(NSNotification *notification) { 
    HUEditProfileViewController *editHUProfileViewController = [[HUEditProfileViewController alloc] initWithNibName:@"EditProfileView" bundle:nil]; 
    editHUProfileViewController.isLocationEnabled = true; 
    [_navigationController pushViewController:editHUProfileViewController animated:NO]; 
               }]; 
+0

если вы хотите, чтобы вернуться к 1, вы можете использовать: popToRootViewControllerAnimated из любых. – SeanLintern88

+0

Это, безусловно, невозможно, вы должны менять навигационный стек где-то посередине, пожалуйста, дважды проверьте свою реализацию. –

+0

- ваш встроенный контроллер навигации –

ответ

0

Я пытаюсь объяснить, как навигационный контроллер работает.

Он поддерживает навигационный стек. предположим, что есть три вида ViewContoller, такие как A, B и C.

Первоначально стек naviagtion пуст, поэтому верхняя часть стека пуста.

, когда вы устанавливаете A как rootviewController, тогда он становится вершиной стека. Верхняя часть стека всегда видна на экране или в окне.

Теперь, если вы нажмете B на A, тогда B станет вершиной стека, чтобы B был виден на главном экране. Итак, теперь ваш навигационный стек похож на A -> B (вверху).

Теперь, если вы нажмете C, тогда стек будет таким, как A-> B-> C (вверху). Итак, c находится перед вами или на главном экране.

Если теперь вы контроллер pop view, то это означает, что вы находитесь removing верхней части стека из вашего навигационного стека. поэтому, если вы вызываете popViewController, тогда C удаляется из стека, поэтому ваш стек теперь A-> B (вверху).

снова нажать C, то А-> В-> С (вверху)

Снова поп затем А-> В (вверху)

Опять поп затем A (вверху).

Таким образом, вершина стека всегда видна, а предыдущий vc остается в стеке. но когда вы поп, то сверху удаляется из стека.

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

Это поток навигационного контроллера.

Надеется, что вы получите помощь :)

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