NavigationController: замена выдвинутого UIViewController другим - PullRequest
2 голосов
/ 10 сентября 2010

для лучшего понимания следующего вопроса, вот небольшой рисунок, который иллюстрирует структуру моего приложения: http://grab.by/6jXh

Итак, в основном у меня есть приложение на основе навигации, которое использует метод pushViewController от NavigationController для отображения видов A и B.

То, что я хотел бы сделать, это сделать переход от представления A к представлению B и наоборот. Например, пользователь нажимает кнопку «А» в главном представлении, а представление А нажимается с помощью NavigationController. В этом представлении пользователь может нажать кнопку «Перевернуть в B», и представление B заменит представление A в стеке NavigationController (визуально это делается с помощью переворота). Если пользователь нажимает кнопку «назад» в представлении B, основной вид отображается снова. Чтобы сохранить использованную память, вид (контроллер), который в данный момент не отображается, должен быть освобожден / выгружен / удален.

Каков был бы подходящий способ сделать это? Нужен ли мне какой-то Контейнер Контроллера или это можно сделать без?

Спасибо.

1 Ответ

0 голосов
/ 12 марта 2011

Вы можете создать класс ContainerViewController, а затем нажать его следующим образом:

ContainerViewController *containerViewController = [[ContainerViewController alloc] initWithFrontView: YES];
[self.navigationController pushViewController: containerViewController animated: YES];
[containerViewController release];

, где класс может выглядеть примерно так: (поскольку вы можете толкать его с видом спереди или сзади сверху)

- (id)initWithFrontView: (BOOL) frontViewVisible {
    if (self = [super init]) {
        frontViewIsVisible = frontViewVisible;

        viewA = [[UIView alloc] init];
        viewB = [[UIView alloc] init];

        if (frontViewIsVisible) {
            [self.view addSubview: viewA];
        }
        else {
            [self.view addSubview: viewB];
        }


        //add a button that responds to @selector(flipCurrentView:)
    }
    return self;
}

- (void) flipCurrentView: (id) sender {
       [UIView beginAnimations:nil context:nil];
        [UIView setAnimationDuration:0.75];
        [UIView setAnimationDelegate:self];

        if (frontViewIsVisible == YES) {
            [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView: self.view cache:YES];
            [viewA removeFromSuperview];
            [self.view addSubview: viewB];
        } else {
            [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView: self.view cache:YES];
            [viewB removeFromSuperview];
            [self.view addSubview: viewA];
        }

        [UIView commitAnimations];

        frontViewIsVisible =! frontViewIsVisible;
    }

И не забудьте позаботиться об управлении памятью.Я также рекомендую вам взглянуть на http://developer.apple.com/library/ios/#samplecode/TheElements/Introduction/Intro.html - это почти то, что вы ищете.

...