Как узнать, виден ли вид UIViewController

Ответ @William Brendel предоставил три разных варианта использования красивым способом.

Использовать случай 1:

В документации по документации java на этот предоставляет те же варианты использования.

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

Он охватывает два примера:

Используя это с полем и Используя это с конструктором

Используйте случай 2:

Другой вариант использования, который имеет не цитируется в этом сообщении: this может использоваться для синхронизации текущего объекта в многопоточном приложении для защиты критического раздела данных & amp; методы.

synchronized(this){
    // Do some thing. 
}

Использовать случай 3:

Реализация шаблона Builder зависит от использования this для возврата измененный объект.

См. этот пост

Сохранение строителя в отдельном классе (свободный интерфейс)

528
задан shim 22 November 2018 в 22:19
поделиться

3 ответа

Свойство window представления не является nil, если представление в данный момент видно, поэтому проверьте главное представление в контроллере представления:

Вызов метода view вызывает загрузку представления (если оно не загружено), что не нужно и может быть нежелательно. Было бы лучше сначала проверить, не загружено ли оно уже. Я добавил вызов isViewLoaded, чтобы избежать этой проблемы.

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

С iOS9 это стало проще:

if viewController.viewIfLoaded?.window != nil {
    // viewController is visible
}

Или если у вас есть UINavigationController, управляющий контроллерами представления, вы можете вместо этого проверить его свойство visibleViewController.

1040
ответ дан 22 November 2019 в 22:23
поделиться

Я использую это маленькое расширение в Swift 5, который сохраняет его простым и легким для проверки на любой объект, который является членом UIView.

extension UIView {
    var isVisible: Bool {
        guard let _ = self.window else {
            return false
        }
        return true
    }
}

Затем я просто использую его в качестве простого если проверка оператора...

if myView.isVisible {
    // do something
}

я надеюсь, что это помогает! :)

0
ответ дан 22 November 2019 в 22:23
поделиться

Вы хотите использовать свойство UITabBarController selectedViewController. Все контроллеры представления, присоединенные к контроллеру панели вкладок, имеют установленное свойство tabBarController, поэтому вы можете из кода любого контроллера представления:

if([[[self tabBarController] selectedViewController] isEqual:self]){
     //we're in the active controller
}else{
     //we are not
}
28
ответ дан 22 November 2019 в 22:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: