![](/img/trans.png)
[英]iOS: Removing one view from superview causes another to get removed?
[英]Removing a view from a SuperView on iOS 4 SDK
我正在使用iOS 4 SDK開發iPhone 3.1.3應用程序。
我有兩個ViewController,mainViewController和AboutViewController。
我使用以下代碼從mainViewController轉到AboutViewController(mainViewController.m內部的代碼):
- (IBAction) aboutClicked:(id)sender
{
AboutViewController* aboutController =
[[AboutViewController alloc]
initWithNibName:@"AboutViewController"
bundle:nil];
[self.view addSubview:aboutController.view];
[aboutController release];
}
然后從AboutViewController返回到mainViewController(AboutViewController.m中的代碼):
- (IBAction) backClicked:(id) sender
{
[self.view removeFromSuperview];
}
當我在AboutViewController上單擊“后退”按鈕時,我得到一個EXC_BAD_ACCESS。
我正在使用基於窗口的應用程序模板。
我也嘗試在[self.view removeFromSuperview]
添加一個斷點,但是我不能。
你知道為什么嗎?
改為這樣做:
- (IBAction) aboutClicked:(id)sender
{
AboutViewController* aboutController =
[[AboutViewController alloc]
initWithNibName:@"AboutViewController"
bundle:nil];
[self presentModalViewController:aboutController animated:YES];
[aboutController release];
}
然后從AboutViewController返回到mainViewController(AboutViewController.m中的代碼):
- (IBAction) backClicked:(id) sender
{
[[self parentViewController] dismissModalViewControllerAnimated:YES]
}
嘗試:
[self presentModalViewController:aboutController animated:YES];
呈現視圖和:
[self dismissModalViewControllerAnimated:YES];
要刪除視圖...
1)使aboutController為類級別的變量
2)創建一個委托方法來處理
(IBAction) backClicked:(id) sender
3)實現委托通話
[aboutController.view removeFromSuperView];
之所以得到EXC_BAD_ACCESS,是因為在將viewController的視圖添加為子視圖之后,您釋放了控制器,因此touch事件無法看到要處理的viewController。
注釋掉發布聲明,如下所示,它應該可以工作
- (IBAction) aboutClicked:(id)sender
{
AboutViewController* aboutController =
[[AboutViewController alloc]
initWithNibName:@"AboutViewController"
bundle:nil];
[self.view addSubview:aboutController.view];
//[aboutController release]; To avoid leaking consider creating aboutController variable at instance level and releasing it in the dealloc.
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.