我需要在另一个顶部添加一个新视图(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]; }
我期待着有关改善这一点的任何进一步建议。 谢谢大家!
答案 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];
}
别忘了连接新添加的视图。
尝试一下。