2009-10-03 2 views
3

добавить FirstView в AppDelegate:UIView продолжает существовать после того, как removeFromSuperview

#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]; 
} 

Тогда я хочу, чтобы перейти к secondView:

#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 ...

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

Download the full code

ответ

1

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

+0

Спасибо за ответ. Я тоже попробую, но вам нужно немного помочь. Если я добавлю контроллер вида в окно с IB, мне нужно добавить также представление в MainWindow.xib, которое будет отображаться на верхнем уровне? – Rufilix

+0

Наконец я последовал этому подходу. – Rufilix

+0

Вы нашли ответ на свой вопрос? Это дает другой подход, но, похоже, прямо не отвечает на то, что не работает. Я пытаюсь понять проблему, похожую на вашу. – Jacob

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

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

+0

Спасибо за ваш ответ. Мне нужно добавить secondView.xib на главный экран, поэтому я спрашиваю self.view для добавления. Это неправильно ? свойство mainViewController было создано для удаления firstView.xib, связанного с используемым MainViewController. Потому что я не мог удалить xib без свойства. Я не нашел ответа, но все еще изучал ... – Rufilix

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