Swift Academy · Lektion

UIViewControllerRepresentable

Bädda in fullständiga UIKit-vykontrollers, som UIImagePickerController, i SwiftUI.

Lektion 3 av 413 steg

UIViewControllerRepresentable är en gratis lektion i Swift Academy på CoddyKit. Detta är lektion 3 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Swift Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Swift Academy innehåller totalt 4 lektioner.

Vad är UIViewControllerRepresentable?

Precis som UIViewRepresentable, men omsluter en fullständig UIViewController för användning i SwiftUI.

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

makeUIViewController

Skapa och konfigurera UIKit-vycontrollern. Metoden anropas en gång när SwiftUI renderar representabeln för första gången.

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

updateUIViewController

Anropas varje gång SwiftUI-tillståndet ändras. För över de uppdaterade värdena till den befintliga vycontrollern.

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

dismantleUIViewController

En statisk rensningsmetod som anropas innan vycontrollern tas bort från hierarkin.

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

Omsluta UIDocumentPickerViewController

Exempel: omslut dokumentväljaren så att användare kan välja filer och skicka URL:er tillbaka till 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) {}
}

Presentera modalt

Bädda in UIViewControllerRepresentable i ett .sheet för modal presentation.

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

Exempel med Mail Composer

Omslut MFMailComposeViewController för att visa ett fönster för att skriva e-post från 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) {}
}

Täcka hela skärmen

Använd .fullScreenCover för vycontrollers som måste fylla skärmen.

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

Skicka closures för återkoppling

I stället för bindningar kan closures skickas till representabeln för händelsemeddelanden.

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

Intrinsisk storlek

UIKit-vycontrollers bestämmer sin egen storlek. Använd SwiftUI:s rammodifierare eller vycontrollerns föredragna innehållsstorlek.

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

Vanliga användningsområden

UIViewControllerRepresentable används ofta för: UIImagePickerController, MFMailComposeViewController, AVPlayerViewController, UIDocumentPickerViewController och SFSafariViewController.

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

Snabbkontroll

Vilken metod anropas av SwiftUI varje gång representabelns SwiftUI-indata ändras?

Lektionssammanfattning

UIViewControllerRepresentable omsluter fullständiga UIKit-vycontrollers. Implementera makeUIViewController (skapa en gång), updateUIViewController (synkronisera tillstånd) och valfritt dismantleUIViewController (rensa upp). Använd Coordinator för delegatåteranrop.

Gratis att börja

Lär dig Swift med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
122
Lektioner
409

Vanliga frågor

Är lektionen ”UIViewControllerRepresentable” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Swift Academy, inklusive ”UIViewControllerRepresentable”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Swift Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”UIViewControllerRepresentable”?

Bädda in fullständiga UIKit-vykontrollers, som UIImagePickerController, i SwiftUI. Ni övar på Swift Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Swift Academy?

Du behöver inga förkunskaper. Utbildningen i Swift Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.

Hur lång tid tar lektionen ”UIViewControllerRepresentable”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Swift Academy-lektionen?

Ja. Varje Swift Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. UIViewRepresentable: omsluta UIKit-vyer
  2. Coordinator-mönstret för delegate-kommunikation
  3. UIViewControllerRepresentable
  4. UIHostingController: SwiftUI i UIKit
← Tillbaka till Swift Academy