O que é UIWindow em Swift? Um único controlador de visualização contém várias janelas?


Melhor resposta

UIWindow é uma classe em UIKit, a estrutura de IU para iOS (e tvOS e watchOS).

Ao iniciar um aplicativo, o processo normal para exibir algo é criar uma UIWindow, criar um UIViewController com a visualização que deseja exibir e definir o “controlador de visualização raiz” da UIWindow como UIViewController.

Se você estiver criando um aplicativo baseado em storyboard, isso é feito para você. Você pode definir a “Interface principal” e esse arquivo .storyboard será carregado como o controlador de visualização raiz. Você pode acessar esta UIWindow em AppDelegate.

Se não estiver usando storyboards, você precisa de algo como este código

var window: UIWindow?

func application(\_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

window = UIWindow(frame: UIScreen.main.bounds)

let vc = CustomViewController()

window?.rootViewController = vc

window?.makeKeyAndVisible()

}

na função didFinishLaunching de AppDelegate para criar a UIWindow e definir seu controlador de visualização raiz para o seu aplicativo. Observe que para tornar a UIWindow visível na tela, você só precisa defini-la como visível, em vez de adicioná-la como uma subvisualização ou colocá-la em alguma outra hierarquia.

Normalmente, para mostrar mais controladores de visualização, outros do que o controlador de visualização raiz, você pode apresentá-los modalmente ou usar um controlador de navegação / guia, portanto, não há muitos motivos para criar mais janelas em seu aplicativo.

Um dos motivos pode ser mostrar um alerta ou ter um sistema de notificação no aplicativo, onde você deseja mostrar um elemento de IU acima de tudo em seu aplicativo (acima até mesmo do teclado e alguns alertas do sistema, eu acredito).

Ou se seu aplicativo realmente tira vantagem de duas telas (ou seja, via AirPlay), então você precisaria criar uma nova UIWindow, definir sua tela para aquela da tela secundária, definir seu controlador de visualização raiz e defini-lo como visível.

Para endereçar diretamente sua segunda pergunta, suponho que você poderia adicionar várias UIWindows como subvisualizações da visão de um controlador de visão (como UIWindow faz a subclasse UIView), mas certamente não é assim que eles são normalmente usados, e eu realmente não sei como seria.

Resposta

Primeiro, UIWindow não tem nada a ver com o Swift. Não faz parte da linguagem Swift de forma alguma. É parte da estrutura UIKit da apple, que atualmente é a estrutura de IU padrão para iOS (e que em breve será a estrutura de IU padrão para MacOS). UIViewController também faz parte do UIKit.

Um UIWindow é o que contém a interface de usuário do seu aplicativo. É o que despacha eventos de interação do usuário para suas visualizações. Um aplicativo iOS típico tem uma única UIWindow.

Um UIViewController não contém qualquer UIWindow se opõe e seria uma má decisão de design se o fizesse.

Recomendo a leitura da documentação: UIKit | Documentação de desenvolvedor da Apple

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *