У меня есть приложение панели вкладок, с множеством просмотров. Есть ли способ узнать, UIViewController
видно ли конкретное в данный момент из UIViewController
? (ищет недвижимость)
ios
uiview
uiviewcontroller
uiwindow
Роб Боннер
источник
источник
Ответы:
Свойство окна представления не равно nil, если представление в настоящее время видно, поэтому проверьте основной вид в контроллере представления:
Вызов метода view приводит к загрузке представления (если оно не загружено), что является ненужным и может быть нежелательным. Было бы лучше сначала проверить, загружен ли он. Я добавил вызов isViewLoaded, чтобы избежать этой проблемы.
С iOS9 стало проще:
Или, если у вас есть UINavigationController, управляющий контроллерами представления, вы можете вместо этого проверить его свойство visibleViewController .
источник
topViewController
.Вот решение @ progrmr как
UIViewController
категория:источник
Есть несколько проблем с вышеуказанными решениями. Если вы используете, например, a
UISplitViewController
, главное представление всегда будет возвращать true дляВместо этого воспользуйтесь этим простым подходом, который, кажется, хорошо работает в большинстве, если не во всех случаях:
источник
Для тех из вас, кто ищет версию Swift 2.2, ответ:
и Свифт 3 :
источник
Для модального представления в полноэкранном или контекстном режиме «видимый» может означать, что он находится над стеком контроллера представления или просто видим, но покрыт другим контроллером представления.
Чтобы проверить, отличается ли контроллер вида «контроллер вида сверху» от «видимого», необходимо проверить стек контроллера представления контроллера навигации контроллера вида.
Я написал кусок кода, чтобы решить эту проблему:
источник
isViewLoaded
является собственностью, начиная с Swift 3.0.Вы хотите использовать
UITabBarController
«SselectedViewController
собственности. Все контроллеры представления, подключенные к контроллеру панели вкладок, имеютtabBarController
набор свойств, так что вы можете сделать это из любого кода контроллера представления:источник
((UINavigationController *)self.tabBarController.selectedViewController).visibleViewController
Я сделал быстрое расширение на основе ответа @ progrmr.
Это позволяет вам легко проверить, есть ли
UIViewController
на экране:Расширение:
источник
Для моих целей, в контексте контроллера представления контейнера, я обнаружил, что
работает хорошо.
источник
Если вы используете UINavigationController, а также хотите обрабатывать модальные представления, я использую следующее:
источник
Подход, который я использовал для модального представленного контроллера представления, состоял в том, чтобы проверить класс представленного контроллера. Если бы представленный контроллер представления был
ViewController2
тогда, я выполнил бы некоторый код.источник
Я нашел эти функции в
UIViewController.h
.Возможно вышеупомянутые функции могут обнаружить
ViewController
появившееся или нет.источник
XCode 6.4, для iOS 8.4, ARC включен
Очевидно много способов сделать это. Тот, который работал для меня, следующий ...
Это может быть использовано в любом контроллере представления следующим образом,
Если вы называете это свойство,
-(void)viewDidLoad
вы получаете 0, то если вы называете это после-(void)viewDidAppear:(BOOL)animated
того, как вы получаете 1.Надеюсь, это кому-нибудь поможет. Спасибо! Приветствия.
источник
Если вы используете контроллер навигации и просто хотите узнать, используете ли вы активный и самый верхний контроллер, используйте:
Этот ответ основан на комментарии @mattdipasquale .
Если у вас более сложный сценарий, посмотрите другие ответы выше.
источник
Вы можете проверить это по
window
свойствуисточник
Мне нужно было это, чтобы проверить, является ли контроллер представления текущим просмотренным контроллером, я сделал это, проверив, есть ли представленный контроллер представления или протолкнул через навигатор, я отправляю это в случае, если кому-то нужно такое решение:
источник
Я использую это небольшое расширение в Swift 5 , что позволяет легко и просто проверять наличие любого объекта, который является членом UIView .
Тогда я просто использую его как простую проверку операторов ...
Я надеюсь, что это помогает! :)
источник