0

我有一个UIViewController包含一个按钮。当我按下按钮时,我使用以下方法添加一个子视图控制器。如何添加和删除UIViewControllers到其他UIViewControllers

- (IBAction)loadEditScreen:(id)sender { 

self.editViewController = [[EditViewController alloc] init]; 

[self addChildViewController:self.editViewController]; 
[self.editViewController didMoveToParentViewController:self]; 

self.editViewController.view.alpha = 0; 
[self.editViewController.view setFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)]; 

[self.view addSubview:self.editViewController.view]; 

[self.editViewController setupImage:self.selectedImageView.image]; 

[UIView animateWithDuration:0.2 
         delay:0.0 
        options:0 
       animations:^{ 
        self.editViewController.view.alpha = 1; 

       } 
       completion:^(BOOL finished){}]; 

} 
- (void)closeEditScreen { 

[self.editViewController willMoveToParentViewController:nil]; 
[self.editViewController.view removeFromSuperview]; 
[self.editViewController removeFromParentViewController ]; 

} 

现在的问题似乎是,我不知道如何去需要删除子视图控制器。在子控制器中,我有一个按钮,可以调用以下内容。

- (IBAction)closeEditScreen:(id)sender { 

HomeViewController *tmpController = [[HomeViewController alloc] init]; 
[tmpController closeEditScreen]; 

/*[UIView animateWithDuration:0.2 
         delay:0.0 
        options:0 
       animations:^{ 
        self.view.alpha = 0; 
       } 
       completion:^(BOOL finished){ 
        [self didMoveToParentViewController:nil]; 
        [self.view removeFromSuperview]; 
       }];*/ 

} 

问题似乎是该方法被调用,但实际上并没有发生。即使我知道该方法正在工作,因为我已经设置了断点,View并未被删除。

任何帮助将是伟大的。我只是想添加一个childviewcontroller,然后有一个按钮,在按下时移除childviewcontroller。

由于提前

+1

检查SO帖子http://stackoverflow.com/questions/13844432/container-uiviewcontroller-not-releasing-its-child-view-controllers – Jhaliya

回答

1

EditViewController closeEditScreen:(子VC)中,您正在创建HomeViewController(父VC)的新实例,并在该新实例上调用。这是错误的,你不想要一个新的实例。

你想要做的是在HomeViewController实例上调用,该实例已经存在并创建了你的子VC。试试这个:

- (IBAction)closeEditScreen:(id)sender 
{ 
    // This is the instance of HomeViewController that you need 
    UIViewController* parentViewController = self.parentViewController; 
    // Cast the type so that you can invoke closeEditScreen without a compiler warning 
    HomeViewController* parentHomeViewController = (HomeViewController*)parentViewController; 
    [parentHomeViewController closeEditScreen]; 
} 

虽然这应该让你正确的HomeViewController实例一起工作,我不知道你的方法是否去除孩子VC可能不会有其他问题。如果你遇到更多问题,那么你一定要仔细阅读Cy-4AH答案中提到的VC编程指南。

+0

谢谢!这似乎解决了这个问题。我认为这可能是因为新的实例,但不知道如何回调父视图控制器。再次感谢。 – ORStudios