多个ViewControllers(containerView?childView?viewController实例?)

时间:2012-03-27 05:28:53

标签: ios uiviewcontroller viewcontroller

我需要在另一个顶部添加一个新视图(w / ViewController)。用户暂时与此新视图交互,然后我想删除它。在较旧版本的Xcode中,我能够将其添加为子视图。我现在收到一个EXC_BAD_ACCESS错误。

我不希望将添加的视图作为模态。我需要通过添加的视图查看原始背景。我已经阅读了很多关于新的自定义containerViews,addChildView和& presentView。我看不出其中任何一个都是明确的答案。

这是之前有效的旧代码 - 主ViewController中的操作:

-(IBAction)showWhiteView:(id)sender
{
    WhiteViewController *whiteView = [[WhiteViewController alloc] initWithNibName:@"WhiteViewController" bundle:nil];
    [self.view addSubview:whiteView.view];
}  

添加视图中的操作以将其删除:

-(IBAction)removeView:(id)sender
{
    [self.view removeFromSuperview];
}

感谢您的帮助。

也许一个可视化示例将有助于解释 - 假设主视图是海洋,动画波浪和云移动由MainView控制器控制。用户点击了一些东西,我想在主视图中添加一条船(WhiteView)。我希望用户与船进行交互:点击此处,帆打开,点击那里锚点等等(需要WhiteViewController的方法)最终我想从海洋中移除船。

谢谢Tim - 新增代码:

-(IBAction)showWhiteView:(id)sender
{   WhiteViewController *whiteView = [[WhiteViewController alloc] initWithNibName:@"WhiteViewController" bundle:nil];
    [self addChildViewController:whiteView];
    [whiteView didMoveToParentViewController:self];
    [self.view addSubview:whiteView.view];   }

并在WhiteViewController中删除:

-(IBAction)removeView:(id)sender
{    [self.view removeFromSuperview];
     [self removeFromParentViewController];    }

我期待着有关改善这一点的任何进一步建议。 谢谢大家!

2 个答案:

答案 0 :(得分:5)

请参阅有关UIViewController遏制的答案here。我在这里放了一个关于UIViewController包含的示例项目:http://github.com/toolmanGitHub/stackedViewControllers

希望这会有所帮助.`

答案 1 :(得分:1)

我从你的问题中理解的是,你想要在superview中添加一个子视图,哪个必须是用户可以互动的?

所以你可以按照以下步骤去做。

  

1)向xib添加新视图     2)使其不透明,设置为小于1的alpha(但不是零,取决于你,你想要多少trasparancy)
   3)在其上添加组件,   在-(IBAction)showWhiteView:(id)sender内(在您的情况下)以下代码

whiteView.frame = CGRectMake(55, 60, 200, 200);
[UIView beginAnimations:@"" context:nil];
[UIView setAnimationDuration:.5];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.view cache:YES];
[self.view addSubview:whiteView];

要删除它,请执行以下操作

-(IBAction)removeView:(id)sender
  {
     [whiteView removeFromSuperview];
  }

别忘了连接新添加的视图。

尝试一下。