Как проверить, отображается ли в настоящее время UIViewController?

Как проверить, отображается ли UIViewController?

My UIViewControllers прослушивает NSNotifications - даже если они не отображаются (т.е. не показаны). Поэтому я мог бы иметь 10 UIViewController в фоновом режиме, наблюдая NSNotifications от NSNotificationCenter. Когда NSNotification отправляется и принимается UIViewController, я хотел бы узнать, отображается ли оно в настоящее время. Если это не так, я просто установлю логическое значение так, чтобы оно обрабатывалось при представлении представления. Если он отображается в настоящее время, я буду делать больше вещей, таких как таблицы обновлений, и так далее...

Ответ 1

Вам нужно проверить, находится ли ваш диспетчер view поверх стека массива управления viewcontroller. Пример кода:

if (self.navigationController.topViewController == self) {
    //the view is currently displayed
}

Вы можете использовать это внутри метода viewWillAppear, чтобы проверить, видно ли текущее представление.

Ответ 2

Проверьте, не прикреплен ли он к окну. Если это не nil это в иерархии, которая прикреплена к экрану (конечно, это может быть за пределами экрана, покрыто каким-то другим видом или иметь скрытый флаг)

if (myViewController.view.window) {
  // I'm attached to the window
} else {
  // not attached to the window
}

Ответ 3

Вы можете использовать флаги в viewWillAppear и viewWillDisappear для этого.

Ответ 4

Почему бы вам не удалить прослушиватель уведомлений в viewWillDisappear и добавить его в viewWillAppear?

Изменить: неправильно спросите его, извините.

Рекомендуемый ответ: установите свой собственный флаг (BOOL) в viewDidDisappear и viewDidAppear.

Ответ 5

Укажите заголовок для каждого ViewController, а затем получите заголовок текущего ViewController по приведенному ниже коду.

NSString *currentController = self.navigationController.visibleViewController.title;

Then check it by your title like this

if([currentController isEqualToString:@"myViewControllerTitle"]){

    //write your code according to View controller. 

}

Ответ 6

Я думаю, что проверка viewController.view.superview должна работать.

Ответ 7

Уже слишком поздно, чтобы повторить на этот вопрос.

Чтобы проверить, что экземпляр UIViewController в данный момент находится в верхней части экрана, или чтобы проверить, отображается ли он на экране, вы можете поставить галочку следующим образом:

// Get the topmost view showing on the screen as below
    UIViewController * currentVC = ((UINavigationController*)app.window.rootViewController).visibleViewController;

// Now check whether the viewcontroller you want to show is the same as the currently showing view controller.
    if (currentVC.class == myVC.class) {  // Here myVC is any/new instance of the viewcontroller you would like to check or show (if not shown).
         // If both are same then it returns true and executes this block of code.
    }