1

У меня есть viewcontroller с настраиваемым переходом на навигацию с использованием UINavigationControllerDelegate. Все работает отлично, когда вы запускаете анимацию, нажмите кнопку «Назад» и т. Д.animationControllerForOperation не вызывается после того, как приложение переходит на задний план

Однако, если вы нажмете viewcontroller в стек, запустите приложение, верните и затем нажмите назад, метод делегата animationControllerForOperation не вызывается должно быть. во время отладки, я подтвердил, что self.navigationController.delegate все еще правильно установлен, когда мы возвращаем приложение на передний план, но обратный вызов делегата никогда не попадает. Есть идеи?

//presenting vc 
- (id<UIViewControllerAnimatedTransitioning>)navigationController:(UINavigationController *)navigationController 
           animationControllerForOperation:(UINavigationControllerOperation)operation 
              fromViewController:(UIViewController*)fromVC 
              toViewController:(UIViewController*)toVC 
{ 
    if (operation == UINavigationControllerOperationPush) { 
     _animationObject = [LVDashboardExplainerAnimation new]; 
     _animationObject.presenting = YES; 
     return _animationObject; 
    } else if (operation == UINavigationControllerOperationPop) { 
     _animationObject.presenting = NO; 
     return _animationObject; 
    } 
    return nil; 
} 

//other VC 
- (void)headerTapped { 
    self.navigationController.delegate = _navigationDelegate; //correct object 
    [self.navigationController popViewControllerAnimated:YES]; 
} 

ответ

1

Проблема связана с ручным вызовом viewWillAppear: анимированный, когда приложение возвращается из фонового рисунка. Вызвав это, делегат навигации вызовет willShowViewController: анимированный: но не navigationController: animationControllerForOperation: или didShowViewController: анимированный:

По какой-то причине принудительно вызывающий viewWillAppear отбрасывает все это. Даже если мы учли это и установили делегат навигации на нуль, а затем вернемся к правильному объекту, функциональность не будет работать правильно. Я предполагаю, что это ошибка в SDK, но пока мы удалили принудительный вызов viewWillAppear.

Смежные вопросы