Как проверить, отображается ли в настоящее время 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.
}