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

Posted

技术标签:

【中文标题】如何添加和删除 UIViewControllers 到其他 UIViewControllers【英文标题】:How To Add and Remove UIViewControllers to other UIViewControllers 【发布时间】:2014-01-11 12:55:03 【问题描述】:

我有一个包含按钮的 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,然后在 child 中有一个按钮,在按下时删除 childviewcontroller。

提前致谢

【问题讨论】:

查看 SO 帖子 ***.com/questions/13844432/… 【参考方案1】:

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

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

- (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 编程指南。

【讨论】:

谢谢!这似乎解决了这个问题。我认为这可能是因为新实例,但不确定如何回调父视图控制器。再次感谢。【参考方案2】:

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

【讨论】:

以上是关于如何添加和删除 UIViewControllers 到其他 UIViewControllers的主要内容,如果未能解决你的问题,请参考以下文章

如何向多个 UIViewControllers 添加点击手势

如何向所有 UIViewControllers 添加一个通用的浮动操作按钮

将相同的 UIBarButtonItem 添加到几个 UIViewControllers

将变量添加到所有 UIViewControllers

在 UIViewControllers 和 UISplitViewController 之间导航 [关闭]

添加 UIViewControllers 视图作为另一个 UIViewController 视图的子视图