popToViewController, затем pushViewController - PullRequest
3 голосов
/ 18 ноября 2011

После моего rootViewController, есть рабочий процесс, который будет выглядеть так

viewController1 -> push viewController2 -> push viewController3 -> ***** viewController2

Я бы хотел использовать popToViewController3. Однако мне нужно сначала перейти к viewController1, потому что viewController1 в основном определяет, какой экземпляр viewController2 нажать. Итак, я

// pseudo code
[popToViewController:vc1 animated:NO];
[self.navigationController pushViewController2 animated:YES];

Я в основном всплываю перед нажатием, поэтому я не получаю vc2, vc3, vc2, vc3, vc2 и т. Д. Но при этом, поскольку он анимирует нажатие последнего viewController, у пользователя создается впечатление, что новый viewController был помещен в стек, по сравнению с переходом к предыдущему viewController. Есть ли способ обойти это? Если я анимирую всплывающее окно, а не последний толчок, я не получаю правильный viewController, который мне нужен на первый взгляд. Спасибо.

Ответы [ 3 ]

1 голос
/ 07 января 2013
@interface UINavigationController (PushThenPop)
-(void)popToViewController:(UIViewController*)rootViewController
    thenPushViewController:(UIViewController*)pushViewController;
@end


@implementation UINavigationController (PushThenPop)
-(void)popToViewController:(UIViewController*)rootViewController
    thenPushViewController:(UIViewController*)pushViewController
{
    NSMutableArray *viewControllers = self.viewControllers.mutableCopy;

    // Pop viewcontrollers until we reach the rootViewController
    while(viewControllers.count >= 1) {
        id last = [viewControllers lastObject];
        if (last == rootViewController) break;
        [viewControllers removeLastObject];
    }

    // Bail out the array is empty. We expect the array to contain at least 1 element, the rootViewController.
    if (!viewControllers.count) {
        return;
    }

    // Push the new view controller
    [viewControllers addObject:pushViewController];
    self.viewControllers = viewControllers.copy;
}
@end
1 голос
/ 18 ноября 2011

вы можете использовать что-то вроде

[self.navigationController setViewControllers:[NSArray arrayWithObject:yourViewController] 
                                     animated:YES];

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

0 голосов
/ 18 ноября 2011

Вы можете извлечь (viewControllers), изменить и «переустановить» (setViewControllers) список контроллеров представления, управляемых контроллером навигации, и «переустановить» можно (теоретически) анимировать. (Однако у меня были некоторые проблемы с анимацией на практике, хотя я не помню подробностей.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...