Eu tenho um aplicativo de barra de guias, com muitas visualizações. Existe uma maneira de saber se um determinado UIViewController
item está visível no momento UIViewController
? (à procura de um imóvel)
ios
uiview
uiviewcontroller
uiwindow
Rob Bonner
fonte
fonte
Respostas:
A propriedade window da view é nula se uma view estiver visível no momento; portanto, verifique a view principal no controlador de view:
A chamada do método de exibição faz com que a exibição seja carregada (se não estiver carregada), o que é desnecessário e pode ser indesejável. Seria melhor verificar primeiro para ver se ele já está carregado. Eu adicionei a chamada ao isViewLoaded para evitar esse problema.
Desde o iOS9, ficou mais fácil:
Ou, se você tiver um UINavigationController gerenciando os controladores de exibição, poderá verificar sua propriedade visibleViewController .
fonte
topViewController
.Aqui está a solução do @ progrmr como uma
UIViewController
categoria:fonte
Existem alguns problemas com as soluções acima. Se você estiver usando, por exemplo, a
UISplitViewController
, a visualização principal sempre retornará verdadeira paraEm vez disso, adote esta abordagem simples que parece funcionar bem na maioria, se não em todos os casos:
fonte
Para aqueles que procuram uma versão Swift 2.2 da resposta:
e Swift 3 :
fonte
Para apresentações modais em tela cheia ou em contexto, "é visível" pode significar que está no topo da pilha do controlador de exibição ou apenas visível, mas coberto por outro controlador de exibição.
Para verificar se o controlador de visualização "é o controlador de visualização superior" é bastante diferente de "está visível", verifique a pilha do controlador de visualização do controlador de navegação do controlador de visualização.
Eu escrevi um pedaço de código para resolver esse problema:
fonte
isViewLoaded
é uma propriedade desde o Swift 3.0.Você quer usar o
UITabBarController
'sselectedViewController
propriedade. Todos os controladores de visualização conectados a um controlador de barra de guias têm umtabBarController
conjunto de propriedades, para que você possa, de qualquer código do controlador de visualização:fonte
((UINavigationController *)self.tabBarController.selectedViewController).visibleViewController
Fiz uma extensão rápida com base na resposta do @ progrmr.
Ele permite que você verifique facilmente se a
UIViewController
está na tela assim:A extensão:
fonte
Para meus propósitos, no contexto de um controlador de exibição de contêiner, descobri que
funciona bem.
fonte
se você estiver utilizando um UINavigationController e também quiser lidar com modos de exibição modais, é o que eu uso:
fonte
A abordagem que usei para um controlador de exibição apresentado modal foi verificar a classe do controlador apresentado. Se o controlador de exibição apresentado fosse
ViewController2
, eu executaria algum código.fonte
Eu encontrei essas funções em
UIViewController.h
.Talvez as funções acima possam detectar a
ViewController
aparência ou não.fonte
XCode 6.4, para iOS 8.4, habilitado para ARC
Obviamente, muitas maneiras de fazê-lo. O que funcionou para mim é o seguinte ...
Isso pode ser usado em qualquer controlador de exibição da seguinte maneira,
Se você chamar essa propriedade,
-(void)viewDidLoad
obtém 0, e depois-(void)viewDidAppear:(BOOL)animated
chamar 1.Espero que isso ajude alguém. Obrigado! Felicidades.
fonte
Se você estiver usando um controlador de navegação e apenas quiser saber se está no controlador ativo e superior , use:
Esta resposta é baseada no comentário de @mattdipasquale .
Se você tiver um cenário mais complicado, consulte as outras respostas acima.
fonte
você pode verificá-lo por
window
propriedadefonte
Eu precisava disso para verificar se o controlador de exibição é o atual controlador visualizado, fiz isso verificando se há algum controlador de exibição apresentado ou enviado pelo navegador, estou publicando-o no caso de alguém precisar dessa solução:
fonte
Eu uso essa pequena extensão no Swift 5 , que mantém simples e fácil verificar qualquer objeto que seja membro do UIView .
Então, eu apenas o uso como uma verificação simples de instrução if ...
Espero que ajude! :)
fonte