уничтожить uiviewcontroller, содержащий UIWebView при воспроизведении видео? - PullRequest
0 голосов
/ 04 июня 2011

Привет всем ... У меня есть контроллер представления (A), который при каком-то действии выделяет еще один контроллер представления init (B), а затем добавляет представление B к своему представлению как подпредставление. Итак, теперь представление ViewController B является подпредставлением ViewController A. У меня проблема в том, что если я просто удаляю представление B из A, кажется, что он все еще остается, например. Представление B содержит веб-представление, когда я загружаю видео в веб-представление, даже после того, как я удаляю представление из представления представления контроллера A, я все еще могу слышать видео ??

Как я могу уничтожить viewcontroller B и удалить его подпредставление из A? Я нахожу это хитрым, потому что я действительно не помещаю его в стек навигационного контроллера, из которого я могу просто выскочить ... Я надеюсь, что это имеет смысл, если не сказать, пожалуйста, и я попытаюсь уточнить.

Большое спасибо

Jules

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

1 голос
/ 04 июня 2011

Действительно ли ViewController B должен быть ViewController?

Если вы добавляете подпредставления, вы, вероятно, должны иметь подкласс B UIView вместо UIViewController. Добавление представления B в качестве подпредставления по существу сводит на нет все ваши преимущества, связанные с тем, что B является ViewController.

В любом случае, чтобы ответить на ваш вопрос. Возможно, вы захотите сделать viewcontroller B иваром A, чтобы viewcontroller A мог управлять памятью viewController B. После того, как вы удалили представление B из A, вы можете освободить viewcontroller B из памяти (я все еще не поддерживаю это, так как звучит как неэффективный код. Вам, вероятно, следует указать, что вы хотите сделать, и опубликовать некоторый код о том, как вы это делаете, чтобы мы могли помочь вам лучше :))

EDIT:

Из вашего кода кажется, что вы должны просто нажать и нажать. Вы используете MyWebViewController только для показа веб-страницы? Возможно, вам лучше использовать простой UIWebView.

Я также заметил, что что-то не так в вашем коде анимации для установки альфа в 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];
}
0 голосов
/ 04 июня 2011
ViewControllerB *vc = [[[ViewControllerB alloc] initWithNibName:@"SomeNib" bundle:nil] autorelease];

Это должно сработать. Автоматическое освобождение контроллера представления в конце его первоначального размещения должно указывать приложению освободить его после того, как вы удалите представление из viewcontroller A, так как ничто другое не имеет удерживающего значения на нем. Хотя использование контроллера навигации может быть более простым решением, если вы хотите переделать свой код, чтобы вместо этого выдвинуть и выдвинуть представление

...