如何添加和删除UIViewControllers到其他UIViewControllers

时间:2014-01-11 12:55:03

标签: ios iphone objective-c uiviewcontroller childviewcontroller

我有一个包含按钮的UIViewController。当我按下按钮时,我使用以下内容添加子视图控制器。

- (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];
                 }];*/

}

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

任何帮助都会很棒。我只想添加一个childviewcontroller,然后在子项中有一个按钮,在按下时删除childviewcontroller。

先谢谢

2 个答案:

答案 0 :(得分:1)

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

您要做的是在已存在的closeEditScreen实例上调用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编程指南。

答案 1 :(得分:0)

您需要阅读View Controller Programming Guide for iOS。你的代码是完全错误的。