UIViewControllerRepresentable
Incorpore controllers de view completos do UIKit, como UIImagePickerController, no SwiftUI.
UIViewControllerRepresentable é uma aula grátis de Swift Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Swift Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Swift Academy inclui 4 aulas no total.
O que é UIViewControllerRepresentable?
Assim como UIViewRepresentable, mas encapsula um UIViewController completo para uso dentro do SwiftUI.
struct ImagePickerView: UIViewControllerRepresentable {
@Binding var image: UIImage?
}makeUIViewController
Cria e configura o controlador de visualização do UIKit. É chamado uma vez quando o SwiftUI renderiza o representável pela primeira vez.
func makeUIViewController(context: Context) -> UIImagePickerController {
let vc = UIImagePickerController()
vc.delegate = context.coordinator
return vc
}updateUIViewController
É chamado sempre que o estado do SwiftUI muda. Transfira os valores atualizados para o controlador de visualização existente.
func updateUIViewController(_ vc: UIImagePickerController, context: Context) {
// Update vc if needed (e.g., change source type)
}dismantleUIViewController
Método estático de limpeza chamado antes que o controlador de visualização seja removido da hierarquia.
static func dismantleUIViewController(_ vc: UIImagePickerController, coordinator: Coordinator) {
vc.dismiss(animated: false)
}Encapsulando UIDocumentPickerViewController
Exemplo: encapsule o seletor de documentos para permitir que os usuários selecionem arquivos e transfira os URLs de volta ao SwiftUI.
struct DocumentPicker: UIViewControllerRepresentable {
@Binding var url: URL?
func makeUIViewController(context: Context) -> UIDocumentPickerViewController {
let picker = UIDocumentPickerViewController(forOpeningContentTypes: [.pdf])
picker.delegate = context.coordinator
return picker
}
func updateUIViewController(_ vc: UIDocumentPickerViewController, context: Context) {}
}Apresentação modal
Incorpore UIViewControllerRepresentable em um .sheet para uma apresentação modal.
@State private var showPicker = false
var body: some View {
Button("Pick Image") { showPicker = true }
.sheet(isPresented: $showPicker) {
ImagePickerView(image: $selectedImage)
}
}Exemplo de compositor de e-mail
Encapsule MFMailComposeViewController para apresentar uma folha de composição de e-mail a partir do SwiftUI.
struct MailView: UIViewControllerRepresentable {
@Binding var isShowing: Bool
func makeUIViewController(context: Context) -> MFMailComposeViewController {
let vc = MFMailComposeViewController()
vc.mailComposeDelegate = context.coordinator
vc.setSubject("Hello from SwiftUI")
return vc
}
func updateUIViewController(_ vc: MFMailComposeViewController, context: Context) {}
}Cobertura em tela cheia
Aplique .fullScreenCover aos controladores de visualização que precisam preencher a tela.
.fullScreenCover(isPresented: $showCamera) {
CameraViewController()
}Passando fechamentos para retornos de chamada
Em vez de usar vinculações, passe fechamentos como retornos de chamada ao representável para notificar eventos.
struct VideoPlayer: UIViewControllerRepresentable {
let url: URL
var onFinish: () -> Void
// Coordinator calls onFinish when playback ends
}Tamanho intrínseco
Os controladores de visualização do UIKit determinam seu próprio tamanho. Use modificadores de moldura do SwiftUI ou o tamanho de conteúdo preferido do controlador de visualização.
struct Popover: UIViewControllerRepresentable {
func makeUIViewController(context: Context) -> UIViewController {
let vc = UIViewController()
vc.preferredContentSize = CGSize(width: 300, height: 200)
return vc
}
func updateUIViewController(_ vc: UIViewController, context: Context) {}
}Casos de uso comuns
UIViewControllerRepresentable é usado com frequência para: UIImagePickerController, MFMailComposeViewController, AVPlayerViewController, UIDocumentPickerViewController e SFSafariViewController.
import SafariServices
struct SafariView: UIViewControllerRepresentable {
let url: URL
func makeUIViewController(context: Context) -> SFSafariViewController {
SFSafariViewController(url: url)
}
func updateUIViewController(_ vc: SFSafariViewController, context: Context) {}
}Verificação rápida
Qual método é chamado pelo SwiftUI sempre que as entradas do SwiftUI do representável mudam?
Recapitulação da lição
UIViewControllerRepresentable encapsula controladores de visualização completos do UIKit. Implemente makeUIViewController (cria uma vez), updateUIViewController (sincroniza o estado) e, opcionalmente, dismantleUIViewController (limpeza). Use o Coordinator para retornos de chamada de delegados.
Perguntas Frequentes
A aula “UIViewControllerRepresentable” é grátis?
Sim — o texto completo de “UIViewControllerRepresentable” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Swift Academy, atualize para CoddyKit PRO. O curso de Swift Academy inclui 4 aulas no total.
O que vou aprender em “UIViewControllerRepresentable”?
Incorpore controllers de view completos do UIKit, como UIImagePickerController, no SwiftUI. Você pratica Swift Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Swift Academy?
Nenhuma experiência prévia é necessária. Swift Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “UIViewControllerRepresentable”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Swift Academy?
Sim. Cada aula de Swift Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- UIViewRepresentable: encapsulamento de views do UIKit
- Padrão Coordinator para comunicação com delegates
- UIViewControllerRepresentable
- UIHostingController: SwiftUI dentro do UIKit