Как определить, виден ли вид UIViewController - PullRequest
527 голосов
/ 06 мая 2010

У меня есть приложение панели вкладок, с множеством просмотров. Есть ли способ узнать, виден ли конкретный UIViewController в данный момент из UIViewController? (ищет недвижимость)

Ответы [ 15 ]

3 голосов
/ 21 мая 2015

Я нашел эти функции в UIViewController.h.

/*
  These four methods can be used in a view controller's appearance callbacks to determine if it is being
  presented, dismissed, or added or removed as a child view controller. For example, a view controller can
  check if it is disappearing because it was dismissed or popped by asking itself in its viewWillDisappear:
  method by checking the expression ([self isBeingDismissed] || [self isMovingFromParentViewController]).
*/

- (BOOL)isBeingPresented NS_AVAILABLE_IOS(5_0);
- (BOOL)isBeingDismissed NS_AVAILABLE_IOS(5_0);

- (BOOL)isMovingToParentViewController NS_AVAILABLE_IOS(5_0);
- (BOOL)isMovingFromParentViewController NS_AVAILABLE_IOS(5_0);

Возможно, вышеупомянутые функции могут обнаружить, появляется ViewController или нет.

3 голосов
/ 27 января 2014

Подход, который я использовал для модального представленного контроллера представления, состоял в том, чтобы проверить класс представленного контроллера. Если бы представленный контроллер представления был ViewController2, тогда я выполнил бы некоторый код.

UIViewController *vc = [self presentedViewController];

if ([vc isKindOfClass:[ViewController2 class]]) {
    NSLog(@"this is VC2");
}
3 голосов
/ 06 октября 2013

, если вы используете UINavigationController, а также хотите обрабатывать модальные представления, я использую следующее:

#import <objc/runtime.h>

UIViewController* topMostController = self.navigationController.visibleViewController;
if([[NSString stringWithFormat:@"%s", class_getName([topMostController class])] isEqualToString:@"NAME_OF_CONTROLLER_YOURE_CHECKING_IN"]) {
    //is topmost visible view controller
}
2 голосов
/ 17 июля 2013

Вы можете проверить это window свойство

if(viewController.view.window){

// view visible

}else{

// no visible

}
0 голосов
/ 22 августа 2018

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

if presentedViewController != nil || navigationController?.topViewController != self {
      //Viewcontroller isn't viewed
}else{
     // Now your viewcontroller is being viewed 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...