0Pricing
Swift Academy · Aula

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

  1. UIViewRepresentable: encapsulamento de views do UIKit
  2. Padrão Coordinator para comunicação com delegates
  3. UIViewControllerRepresentable
  4. UIHostingController: SwiftUI dentro do UIKit
← Voltar para Swift Academy