Как проверить, отображается ли в настоящее время конкретное представление UIViewController?
Возможный дубликат:
Как узнать, видимо ли представление UIViewController
Я разрабатываю приложение, которое обрабатывает постоянный поток входящих данных из сети и предоставляет пользователю различные виды UIView для просмотра этих данных.
Когда некоторые данные модели обновляются на основе входящего потока из сети, я обращаюсь к соответствующему UIViewController или UITableViewController и do -setNeedsDisplay на нем (в случае UIViewController) или -reloadData (в случае UITableViewController).
Есть ли способ проверить, отображается ли данный UIView в настоящее время (кроме того, что он загружается), так что я только делаю -setNeedsDisplay или -reloadData, если пользователь в настоящее время смотрит на этот UIView? Казалось бы, вызов -setNeedsDisplay или reloadData в представлении, которое пользователь в настоящее время не смотрит, является пустой тратой вычислительной мощности и не будет полезен для работы от батареи. Когда пользователь в конечном итоге переключается на представление, которое ранее было обновлено, выполнение -setNeedsDisplay или reloadData в -viewWillAppear будет иметь больше смысла.
Спасибо
Ответы
Ответ 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;
}