Estou criando uma estrutura reutilizável para exibir notificações em um aplicativo iOS. Gostaria que as visualizações de notificação fossem adicionadas acima de tudo o mais no aplicativo, como um UIAlertView. Quando eu inicio o gerenciador que escuta os eventos NSNotification e adiciona visualizações em resposta, preciso obter uma referência para a visualização superior do aplicativo. Isso é o que eu tenho no momento:
_topView = [[[[UIApplication sharedApplication] keyWindow] subviews] lastObject];
Isso funcionaria para qualquer aplicativo iOS ou é uma maneira mais segura / melhor de obter a vista superior?
fonte
(null)
meu aplicativo iOS-8 (problema com storyboards?) Alguma dica? Obrigado! (Observação:(null)
retornou àsviewDidLoad
e naviewWillAppear:
hora.viewDidAppear:
É tarde demais.Existem duas partes do problema: janela superior, vista superior na janela superior.
Todas as respostas existentes perderam a parte superior da janela. Mas
[[UIApplication sharedApplication] keyWindow]
não é garantido que seja a janela superior.Janela de cima. É muito improvável que haja duas janelas com a mesma
windowLevel
coexistência para um aplicativo, portanto, podemos classificar todas as janelaswindowLevel
e obter a que está mais acima.Vista superior na janela superior. Apenas para ser completo. Como já apontado na pergunta:
fonte
topView = [[[[UIApplication sharedApplication] keyWindow] subviews] lastObject];
Na verdade, pode haver mais de uma UIWindow em seu aplicativo. Por exemplo, se houver um teclado na tela,
[[UIApplication sharedApplication] windows]
ele conterá pelo menos duas janelas (a janela de teclas e a janela do teclado).Então, se você quiser que sua visualização apareça no topo de ambos, você precisa fazer algo como:
(Supondo que lastObject contenha a janela com a maior prioridade windowLevel).
fonte
Estou me limitando à pergunta conforme o título indica e não à discussão. Qual vista é visível em qualquer ponto?
Pode ser usado diretamente com qualquer UIWindow como receptor ou qualquer UIView como receptor.
fonte
Se você estiver adicionando uma visualização de carregamento (uma visualização de indicador de atividade, por exemplo), certifique-se de ter um objeto da classe UIWindow. Se você mostrar uma folha de ação antes de mostrar sua visualização de carregamento,
keyWindow
será oUIActionSheet
e nãoUIWindow
. E como a folha de ação desaparecerá, a visualização de carregamento também desaparecerá. Ou era isso que estava me causando problemas.fonte
Se o seu aplicativo funciona apenas na orientação retrato, isso é o suficiente:
E sua visualização não será mostrada no teclado e na barra de status.
Se você deseja obter uma visão superior do teclado ou da barra de status, ou se deseja que a visão superior possa girar corretamente com os dispositivos, experimente esta estrutura:
https://github.com/HarrisonXi/TopmostView
Suporta iOS7 / 8/9.
fonte
Basta usar este código se quiser adicionar uma visão acima de tudo na tela.
fonte
tente isso
fonte
fonte