Как получить доступ к контроллеру представления без анимации

Я хотел бы отобразить изображение в ответ на событие локального уведомления, которое происходит, когда 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, Я не уверен, как исправить это с раскадровками, но если вы представите это программно, эта проблема должна исчезнуть.

Другие вопросы по тегам