Как получить доступ к контроллеру представления без анимации
Я хотел бы отобразить изображение в ответ на событие локального уведомления, которое происходит, когда iPhone заблокирован. Когда пользователь нажимает на уведомление, я бы хотел, чтобы мое приложение перешло к корневому контроллеру представления с помощью popToViewController: animated, а затем нажмите контроллер представления, отображающий изображение. Это работает, когда я установил анимированный = ДА. Когда animated = NO, контроллер представления, который отображает изображение, не отвечает, когда пользователь нажимает кнопку "Назад". Любые мысли о том, почему элементы навигации контроллера представления изображений не работают, когда я popToViewController без анимации? Заранее спасибо.
Вот соответствующий код...
- (void) localNotificationHandler
{
#ifdef kAnimatePop
animated = YES; // This works
#else
animated = NO; // This doesn't work
#endif
_showImage = YES;
// Check if this view controller is not visible
if (self.navigationController.visibleViewController != self) {
// Check if there are view controllers on the stack
if ([self.navigationController.viewControllers count] > 1) {
// Make this view controller visible
[self.navigationController popToViewController:self animated:animated];
}
}
}
- (void) viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
if (_showImage) {
_showImage = NO;
// Show image in a view controller
[self performSegueWithIdentifier:@"MainToImageSegue" sender:self];
}
}
2 ответа
Вы не устанавливаете _showImage до тех пор, пока не будет вызван popToViewController. Если это анимированный viewDidAppear не будет вызван до позже, поэтому он неожиданно работает. Если он не анимирован, то viewDidAppear вызывается немедленно, до того как _showImage был установлен. Переехать _showImage = true;
до манипуляций стека навигатора.
Я мог бы сделать проверку таким образом:
- (void) localNotificationHandler{
...
...
if (self.navigationController.topViewController != self) {
[self.navigationController popToRootViewControllerAnimated:NO];
}
}
Я бы также порекомендовал протолкнуть ваш контроллер просмотра изображений программно
[self.navigationController pushViewController:<imageVC> animated:YES];
Если кнопки навигации контроллера просмотра изображений не работают, скорее всего, потому что он отправляет эти навигационные сообщения nil
, иначе, imageViewControllers self.navigationController
равно nil
, Я не уверен, как исправить это с раскадровками, но если вы представите это программно, эта проблема должна исчезнуть.