嘿所有......我有一个视图控制器(A),在某些动作上,分配init的另一个视图控制器(B),然后将B视图作为子视图添加到其视图中。所以现在ViewController B的视图是ViewController A的子视图。我遇到的问题是如果我只是从A中删除B的视图,它似乎仍然坚持下去。视图B包含一个Web视图,当我在webView上加载视频时,即使我从视图中删除视图控制器A的视图我仍然可以听到视频吗?
如何销毁viewcontroller B并从A中删除其子视图?我发现这很棘手,因为我真的没把它推到一个导航控制器的堆栈上,我可以弹出...我希望这是有道理的,如果不是请说,我会尝试澄清。
非常感谢
朱
-(void)showNewsWebView:(int)index {
NewsWebViewController *myWebView = [[[NewsWebViewController alloc] initWithNibName:@"NewsWebViewController" bundle:nil]autorelease];
//setup webview with request etc
[[self.view.superview superview] addSubview:myWebView.view];
myWebView.alpha = 0.
[UIView beginAnimations:@"test" context:nil];
[UIView setAnimationDuration:.3];
myWebView.view.alpha = 1.;
[UIView commitAnimations];
}
//called after delegate callback from webviewcontroller
- (void)newsWebViewDismissedView:(NewsWebViewController *)controller {
[UIView beginAnimations:@"test" context:nil];
[UIView setAnimationDuration:.3];
controller.view.alpha = 0.0;
[self performSelector:@selector(removeView:) withObject:controller.view afterDelay:.5];
[UIView commitAnimations];
}
-(void) removeView:(UIView *)view {
[view removeFromSuperview];
view = nil;
}
答案 0 :(得分:1)
ViewController B真的需要成为ViewController吗?
如果你要添加子视图,你可能应该有B子类UIView而不是UIViewController。将B的视图添加为子视图基本上否定了您作为ViewController所具有的任何优势。
无论如何要回答你的问题。您可能希望使viewcontroller B成为A的ivar,以便viewcontroller A可以管理viewController B的内存。一旦从A中删除B的视图,就可以从内存中释放viewcontroller B(我仍然不支持它)听起来像无效的代码。你应该说出你的目标,并发布一些代码,告诉你如何做,这样我们可以帮助你更好:))
编辑:
从你的代码看起来你应该只是推动和弹出。您是否只是为了显示网页而使用MyWebViewController?使用简单的UIWebView可能会更好。
我还注意到动画代码中将alpha设置为0有问题。如果你想在动画结束后执行某些方法,你应该使用以下代码:
//called after delegate callback from webviewcontroller
- (void)newsWebViewDismissedView:(NewsWebViewController *)controller {
[UIView beginAnimations:@"test" context:nil];
[UIView setAnimationDuration:.3];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(removeView)];
controller.view.alpha = 0.0;
[UIView commitAnimations];
}
答案 1 :(得分:0)
ViewControllerB *vc = [[[ViewControllerB alloc] initWithNibName:@"SomeNib" bundle:nil] autorelease];
这应该可以解决问题。在初始分配结束时自动释放视图控制器应该告诉应用程序在从viewcontroller A中删除视图后取消分配它,因为没有其他东西在其上保留一个保留值。虽然使用导航控制器可能是一个更简单的解决方案,如果您愿意重新编写代码来推送和弹出视图