在播放视频时销毁包含UIWebView的uiviewcontroller?

时间:2011-06-03 21:24:21

标签: iphone uiwebview uiviewcontroller

嘿所有......我有一个视图控制器(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;
}

2 个答案:

答案 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中删除视图后取消分配它,因为没有其他东西在其上保留一个保留值。虽然使用导航控制器可能是一个更简单的解决方案,如果您愿意重新编写代码来推送和弹出视图