Подтвердить что ты не робот

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

Возможный дубликат:
Как узнать, видимо ли представление UIViewController

Я разрабатываю приложение, которое обрабатывает постоянный поток входящих данных из сети и предоставляет пользователю различные виды UIView для просмотра этих данных.

Когда некоторые данные модели обновляются на основе входящего потока из сети, я обращаюсь к соответствующему UIViewController или UITableViewController и do -setNeedsDisplay на нем (в случае UIViewController) или -reloadData (в случае UITableViewController).

Есть ли способ проверить, отображается ли данный UIView в настоящее время (кроме того, что он загружается), так что я только делаю -setNeedsDisplay или -reloadData, если пользователь в настоящее время смотрит на этот UIView? Казалось бы, вызов -setNeedsDisplay или reloadData в представлении, которое пользователь в настоящее время не смотрит, является пустой тратой вычислительной мощности и не будет полезен для работы от батареи. Когда пользователь в конечном итоге переключается на представление, которое ранее было обновлено, выполнение -setNeedsDisplay или reloadData в -viewWillAppear будет иметь больше смысла.

Спасибо

4b9b3361

Ответ 1

После некоторого исследования я нашел этот ответ в другом вопросе, размещенном здесь... Это, кажется, лучший способ...

Свойство окна просмотра не равно нулю, если вид в настоящее время виден, поэтому проверьте основной вид в контроллере представления:

if (viewController.isViewLoaded && viewController.view.window){
    // viewController is visible
}

Ответ 2

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

- (void)viewDidAppear:(BOOL)animated
{
 [super viewDidAppear:animated];
 visible = YES;
}

- (void)viewWillDisappear:(BOOL)animated
{
 visible = NO;
 [super viewWillDisappear:animated];
}

Ответ 3

Просто для полноты, я думал, что добавлю, как определить, отображается ли контроллер вида в приложении на основе табуляции:

+(BOOL) isSelectedViewController:(UIViewController *)someVC;
{
    myAppDelegate   *appD = [[UIApplication sharedApplication] delegate];
    UIViewController *selectedVC = [appD.TabBarController selectedViewController];

    return selectedVC == someVC;
}