viewWillDisappear и viewDidDisappear никогда не вызывают - PullRequest
4 голосов
/ 05 мая 2011

Я создал свой собственный класс для PopoverController (без создания подкласса UIPopoverController) для представления ViewController так, как я хочу.

CustomPopoverController НЕ является UIViewController, вместо этого в нем есть ивар, называемый "contentViewController", который представляет собой VC, которыйна самом деле будет отображаться.

Я реализовал свой собственный "dismissPopoverAnimated:", чтобы отклонить мой пользовательский всплывающее окно, когда пользователь нажимает в любом месте за пределами кадра contentViewController:

-(void) dismissPopoverAnimated : (BOOL) animated
{
     // dismissalView is the view that intercept the taps outside.
    [self.dismissalView removeFromSuperview];
    self.dismissalView = nil;
    if (animated)
    {
        CGRect newFrame = self.view.frame;
        // When in landscape Mode the width of the screen is actually the "height"
        newFrame.origin.y = [UIScreen mainScreen].bounds.size.width;

        [UIView animateWithDuration:0.5 
                         animations:^{self.view.frame = newFrame;} 
         completion: ^(BOOL finished) {if(finished) [self.contentViewController.view removeFromSuperview];}];
    }
    else 
    {
        [self.contentViewController.view removeFromSuperview];
    }
    isPresented = NO;
    [self.delegate customPopoverDidDismissPopover:self];
}

Проблема в том, что даже еслиremoveFromSuperView вызывается в любом случае - анимированный или нет, contentViewController никогда не получает viewWillDisappear, viewDidDisappear или даже viewDidUnload, когда я выпускаю contentViewController;

У кого-нибудь есть идеи, почему?Или даже лучше пролить свет на цепочку метода viewWill ... / viewDid ... и когда они должны быть вызваны.

1 Ответ

10 голосов
/ 05 мая 2011

Когда вы добавляете подпредставление или удаляете подпредставление методами UIView, оно никогда не вызывает принадлежащих UIViewController вызовов viewWillAppear, viewDidAppear, viewWillDisappear и viewDidDisapper. Только те viewController управляются методом UINavigationController, как pushViewController:animated: или popViewControllerAnimated:, или presentModelViewController:aniamted: ... и т. Д. Они будут уведомлять об изменении статуса для представления контроллера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...