0Pricing
Swift Academy · Lektion

UIViewControllerRepresentable

Binden Sie vollständige UIKit-View-Controller wie UIImagePickerController in SwiftUI ein.

UIViewControllerRepresentable ist eine kostenlose Swift Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Swift Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Swift Academy-Kurs umfasst insgesamt 4 Lektionen.

Was ist UIViewControllerRepresentable?

Ähnlich wie UIViewRepresentable, umschließt diese API jedoch einen vollständigen UIViewController zur Verwendung in SwiftUI.

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

makeUIViewController

Erstellen und konfigurieren Sie den UIKit-View-Controller. Die Methode wird aufgerufen, wenn SwiftUI das Representable zum ersten Mal rendert.

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

updateUIViewController

Wird bei jeder Änderung des SwiftUI-Zustands aufgerufen. Übernehmen Sie aktualisierte Werte in den vorhandenen View-Controller.

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

dismantleUIViewController

Statische Bereinigungsmethode, die aufgerufen wird, bevor der View-Controller aus der Hierarchie entfernt wird.

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

UIDocumentPickerViewController einbinden

Beispiel: Binden Sie den Dokument-Picker ein, damit Benutzer Dateien auswählen und URLs an SwiftUI zurückgeben können.

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

Modal präsentieren

Betten Sie UIViewControllerRepresentable für eine modale Präsentation in ein .sheet ein.

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

Beispiel für einen Mail Composer

Umschließen Sie MFMailComposeViewController, um aus SwiftUI ein Fenster zum Erstellen von E-Mails zu präsentieren.

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

Bildschirmfüllend anzeigen

Wenden Sie .fullScreenCover für View-Controller an, die den gesamten Bildschirm ausfüllen müssen.

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

Closures für Callbacks übergeben

Übergeben Sie dem Representable anstelle von Bindings Closure-Callbacks, um über Ereignisse zu benachrichtigen.

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

Intrinsische Größe

UIKit-View-Controller bestimmen ihre eigene Größe. Verwenden Sie SwiftUI-Frame-Modifier oder die bevorzugte Inhaltsgröße des View-Controllers.

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

Häufige Anwendungsfälle

UIViewControllerRepresentable wird häufig verwendet für: UIImagePickerController, MFMailComposeViewController, AVPlayerViewController, UIDocumentPickerViewController und SFSafariViewController.

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

Kurze Überprüfung

Welche Methode ruft SwiftUI jedes Mal auf, wenn sich die SwiftUI-Eingaben des Representable ändern?

Zusammenfassung der Lektion

UIViewControllerRepresentable umschließt vollständige UIKit-View-Controller. Implementieren Sie makeUIViewController (einmalig erstellen), updateUIViewController (Zustand synchronisieren) und optional dismantleUIViewController (Bereinigung). Verwenden Sie einen Coordinator für Delegate-Callbacks.

Häufig gestellte Fragen

Ist die Lektion „UIViewControllerRepresentable“ kostenlos?

Ja — der vollständige Text von „UIViewControllerRepresentable“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Swift Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Swift Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „UIViewControllerRepresentable“?

Binden Sie vollständige UIKit-View-Controller wie UIImagePickerController in SwiftUI ein. Du übst Swift Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Swift Academy zu starten?

Keine Vorkenntnisse erforderlich. Swift Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „UIViewControllerRepresentable“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Swift Academy-Lektion Code schreiben und ausführen?

Ja. Jede Swift Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. UIViewRepresentable: UIKit-Views einbinden
  2. Coordinator-Pattern für die Delegate-Kommunikation
  3. UIViewControllerRepresentable
  4. UIHostingController: SwiftUI in UIKit
← Zurück zu Swift Academy