2012-03-27 78 views
3

我需要在另一個頂部添加一個新視圖(w/ViewController)。用戶與這個新視圖交互一段時間,然後我想刪除它。在舊版本的Xcode中,我可以將它作爲子視圖添加。我現在得到一個EXC_BAD_ACCESS錯誤。多個ViewControllers(containerView?childView?viewController的實例?)

我不希望添加視圖爲模態。我需要通過添加的視圖來查看原始背景。我讀了很多關於新的自定義containerViews,addChildView,& presentView。我看不出任何這些都是明確的答案。

這裏的舊代碼,工作過 - 在主視圖控制器 操作:在添加視圖

-(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的方法)最終,我想將船從海洋中移除。

感謝蒂姆 - 新的代碼添加:

-(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

您無法刪除基本視圖或父視圖。您可以在父視圖中添加您的子視圖。所以如果你刪除父視圖,你會得到EXE_BAD錯誤 – Hiren 2012-03-27 05:37:18

+0

我將WhiteView作爲子視圖(子視圖)添加到主視圖。 – Scott 2012-03-27 07:57:47

回答

5

查看關於UIViewController遏制的回答here。我在這裏彙集了一個關於UIViewController包含的示例項目:http://github.com/toolmanGitHub/stackedViewControllers

希望這會有所幫助。`

Tim

+0

謝謝Tim!看看你的例子,讓我找到一個解決方案。我只是添加了視圖而不是其控制器。所以我加入了原始代碼。往上看。 – Scott 2012-03-27 18:30:33

+0

蒂姆,我有一個相關的問題。我試圖讓我的孩子視圖控制器消息的父。我已經嘗試了適應你的「[(ViewController *)self.parentViewController swapViewControllers];」從您的示例代碼。它一直告訴我「沒有可見的@interface for'UIViewController'聲明選擇器'myMethod'」我已經導入父視圖控制器。有什麼建議麼? – Scott 2012-03-31 20:18:20

+0

@Scott確保您的父視圖控制器的.h文件包含'myMethod'的聲明。然後還要確保(ViewController *)實際上是您要導入的父視圖控制器名稱。 – timthetoolman 2012-03-31 20:37:28

1

我從你的問題中瞭解到,你想添加一個子視圖到超級視圖,哪些必須是用戶可交互的權利?

所以你可以通過以下步驟做到這一點。

1)向xib添加一個新的視圖。
2)把它不透明,設定爲阿爾法不到一(但不是零,取決於你,你多trasparancy想)
3)添加componats過吧, 和內部​​3210(在你的情況下)下面的代碼

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]; 
    } 

不要忘記連接新添加的視圖。

試一試。

+0

我不確定這是關鍵。這實際上是將ViewController中的方法添加到添加的子視圖中。 – Scott 2012-03-27 07:54:56