0

Я следую this Ответ на «выпуск» моего предыдущего контроллера представления в UINavigationController.Pop UIViewController с использованием пользовательского Segue?

Он отлично работает, но поппинговая часть - это код, с которым мне сложно работать. В основном мое приложение работает так. Он начинается в главном меню (вид 1), затем он подталкивает View 2, и я использую пользовательский push segue, чтобы перейти к View 3. Теперь я хочу использовать другой пользовательский segue для popping now to go from View 3 to View 2. Однако, используя приведенный ниже код, он быстро появляется в View 1, а затем, в конце концов, выталкивает View 2. Похоже, что переход контроллера просмотра неестественен, и я просто ищу, чтобы добиться обычного перехода поп-музыки, вместо этого, используя пользовательский segue «освободить» контроллер представления источника.

Это мой код, я сейчас, используя к чему не привели:

- (void)perform { 
    // Grab Variables for readability 
    UIViewController *sourceViewController = (UIViewController*)[self sourceViewController]; 
    UIViewController *destinationController = (UIViewController*)[self destinationViewController]; 
    UINavigationController *navigationController = sourceViewController.navigationController; 

    // Get a changeable copy of the stack 
    NSMutableArray *controllerStack = [NSMutableArray arrayWithArray:navigationController.viewControllers]; 
    // Replace the source controller with the destination controller, wherever the source may be 
    [controllerStack addObject:destinationController]; 

    // Assign the updated stack with animation 
    [navigationController setViewControllers:controllerStack animated:YES]; 
} 

Есть ли что-то я делаю неправильно здесь?

+0

Попробуйте [navigationController pushViewController: destinationController animated: YES]; –

+0

@NiravDoctorwala Да, однако это не решает проблему. И еще одна проблема заключается в том, что я специально ищу «поп-анимацию», а не «толчок». –

+0

http://stackoverflow.com/questions/10281545/removing-viewcontrollers-from-navigation-stack –

ответ

0

Если вы просто хотите поп Просмотреть 3, чтобы вернуться к просмотру 2, разве вы не можете просто сделать что-то подобное?

- (void)perform { 
    UIViewController *sourceViewController = (UIViewController*)[self sourceViewController]; 
    UINavigationController *navigationController = sourceViewController.navigationController; 
    [navigationController popViewControllerAnimated:YES]; 
} 
+0

Это не то, что мне нужно, хотя из-за появления в моем случае из View 3 -> View 1. Я пытаюсь вид 2 –

0

Я не уверен, если этот ответ локализован для меня, но после регистрации моей иерархии навигации стеки и играя с массивом, я сделал это, и она хорошо работает для меня.

- (void)perform { 
    // Grab Variables for readability 
    UIViewController *sourceViewController = (UIViewController*)[self sourceViewController]; 
    UIViewController *destinationController = (UIViewController*)[self destinationViewController]; 
    UINavigationController *navigationController = sourceViewController.navigationController; 

    // Get a changeable copy of the stack 
    NSMutableArray *controllerStack = [NSMutableArray arrayWithArray:navigationController.viewControllers]; 
    [controllerStack replaceObjectAtIndex:1 withObject:destinationController]; 
    [controllerStack addObject:sourceViewController]; 

    [navigationController setViewControllers:controllerStack animated:NO]; 
    [navigationController popViewControllerAnimated:YES]; 
} 

Более распространенный ответ, вероятно, будет найти индекс вида исходного объекта контроллера в массиве и добавить целевой контроллер представления к индексу перед ним, перенося все из этого предварительного индекса на вперед на одно место, таким образом, вы не испортите ни один из ваших других контроллеров представлений. Как я уже сказал, индекс 1 - это то, что работало для меня в этом случае.