UIView продолжает существовать после removeFromSuperview - PullRequest
3 голосов
/ 03 октября 2009

Я добавляю первый вид в AppDelegate:

#import "TestViewAppDelegate.h"
#import "MainViewController.h"
@implementation TestViewAppDelegate

@synthesize window;
@synthesize mainViewController;

- (void)applicationDidFinishLaunching:(UIApplication *)application {    
    MainViewController *aController = [[MainViewController alloc] initWithNibName:@"MainView" bundle:nil];
    self.mainViewController = aController;
    [aController release];

    self.mainViewController.view.frame = [UIScreen mainScreen].applicationFrame;
    [window makeKeyAndVisible];
    [window addSubview:mainViewController.view];
}

- (void)dealloc {
    [mainViewController release];
    [window release];
    [super dealloc];
}

Тогда я хочу переключиться на второй вид:

#import "MainViewController.h"
#import "SecondViewController.h"

@implementation MainViewController

@synthesize mainViewController, secondViewController;

- (IBAction)viewSwitch
{
    SecondViewController *second = [[SecondViewController alloc] initWithNibName:@"SecondView" bundle:nil];
    self.secondViewController = second;
    [second release];

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.75];
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.view cache:YES];

    [mainViewController.view removeFromSuperview];
    [self.view addSubview:secondViewController.view];

    [UIView commitAnimations];
}

- (void)dealloc {
    [mainViewController release];
    [secondViewController release];
    [super dealloc];
}

@end

И затем то же самое для переключения из secondView в firstView…

Проблема в том, что когда я переключаю вид, который, как я думал, открывается, всегда виден и не исчезает.

Загрузить полный код

Ответы [ 2 ]

2 голосов
/ 04 октября 2009
[mainViewController.view removeFromSuperview];
[self.view addSubview:secondViewController.view];

Что такое "я" здесь? И почему класс MainViewController имеет свойство с именем mainViewController? Изучение этих вопросов, скорее всего, приведет вас к ответу здесь.

1 голос
/ 04 октября 2009

Лучшим подходом может быть создание одного родительского контроллера представления верхнего уровня, который вы добавляете в окно. Он должен иметь ссылку на оба ваших других контроллера представления и выполнять замену. Если вы хотите, чтобы ваша кнопка внутри каждого представления вызывала перестановку, вы можете просто назначить кнопке IBAction для каждого сообщения уведомление о том, что ваше представление верхнего уровня регистрируется и отвечает на него.

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