0Pricing
Swift Academy · Leçon

UIViewControllerRepresentable

Intégrer des contrôleurs de vue UIKit complets, comme UIImagePickerController, dans SwiftUI.

UIViewControllerRepresentable est une leçon Swift Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Swift Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Swift Academy comprend 4 leçons au total.

Qu’est-ce que UIViewControllerRepresentable ?

Comme UIViewRepresentable, mais pour encapsuler un UIViewController complet et l’utiliser dans SwiftUI.

struct ImagePickerView: UIViewControllerRepresentable {
  @Binding var image: UIImage?
}

makeUIViewController

Créez et configurez le contrôleur de vue UIKit. Cette méthode est appelée une seule fois, lorsque SwiftUI effectue le premier rendu du représentable.

func makeUIViewController(context: Context) -> UIImagePickerController {
  let vc = UIImagePickerController()
  vc.delegate = context.coordinator
  return vc
}

updateUIViewController

Cette méthode est appelée chaque fois que l’état de SwiftUI change. Transmettez les valeurs mises à jour au contrôleur de vue existant.

func updateUIViewController(_ vc: UIImagePickerController, context: Context) {
  // Update vc if needed (e.g., change source type)
}

dismantleUIViewController

Méthode statique de nettoyage appelée avant la suppression du contrôleur de vue de la hiérarchie.

static func dismantleUIViewController(_ vc: UIImagePickerController, coordinator: Coordinator) {
  vc.dismiss(animated: false)
}

Encapsuler UIDocumentPickerViewController

Exemple : encapsulez le sélecteur de documents pour permettre aux utilisateurs de sélectionner des fichiers et de transmettre leurs URL à 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) {}
}

Présenter de façon modale

Intégrez UIViewControllerRepresentable dans une .sheet pour effectuer une présentation modale.

@State private var showPicker = false
var body: some View {
  Button("Pick Image") { showPicker = true }
    .sheet(isPresented: $showPicker) {
      ImagePickerView(image: $selectedImage)
    }
}

Exemple de compositeur de courriels

Encapsulez MFMailComposeViewController pour présenter une feuille de composition de courriel depuis 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) {}
}

Affichage en plein écran

Appliquez .fullScreenCover aux contrôleurs de vue qui doivent occuper tout l’écran.

.fullScreenCover(isPresented: $showCamera) {
  CameraViewController()
}

Transmettre des fermetures pour les rappels

Au lieu d’utiliser des liaisons, transmettez des fermetures de rappel au représentable pour notifier les événements.

struct VideoPlayer: UIViewControllerRepresentable {
  let url: URL
  var onFinish: () -> Void
  // Coordinator calls onFinish when playback ends
}

Taille intrinsèque

Les contrôleurs de vue UIKit déterminent leur propre taille. Utilisez les modificateurs de cadre SwiftUI ou la taille de contenu préférée du contrôleur de vue.

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) {}
}

Cas d’utilisation courants

UIViewControllerRepresentable est couramment utilisé pour : UIImagePickerController, MFMailComposeViewController, AVPlayerViewController, UIDocumentPickerViewController et SFSafariViewController.

import SafariServices
struct SafariView: UIViewControllerRepresentable {
  let url: URL
  func makeUIViewController(context: Context) -> SFSafariViewController {
    SFSafariViewController(url: url)
  }
  func updateUIViewController(_ vc: SFSafariViewController, context: Context) {}
}

Vérification rapide

Quelle méthode SwiftUI appelle-t-il chaque fois que les entrées SwiftUI du représentable changent ?

Récapitulatif de la leçon

UIViewControllerRepresentable encapsule des contrôleurs de vue UIKit complets. Implémentez makeUIViewController (création unique), updateUIViewController (synchronisation de l’état) et, si nécessaire, dismantleUIViewController (nettoyage). Utilisez Coordinator pour les rappels des délégués.

Questions Fréquemment Posées

La leçon « UIViewControllerRepresentable » est-elle gratuite ?

Oui — le texte complet de « UIViewControllerRepresentable » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Swift Academy, passe à CoddyKit PRO. Le cours Swift Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « UIViewControllerRepresentable » ?

Intégrer des contrôleurs de vue UIKit complets, comme UIImagePickerController, dans SwiftUI. Tu pratiques Swift Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Swift Academy ?

Aucune expérience préalable n'est requise. Swift Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.

Combien de temps prend la leçon « UIViewControllerRepresentable » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Swift Academy ?

Oui. Chaque leçon Swift Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. UIViewRepresentable : intégrer des vues UIKit
  2. Modèle Coordinator pour la communication avec les délégués
  3. UIViewControllerRepresentable
  4. UIHostingController : SwiftUI dans UIKit
← Retour à Swift Academy