UIViewControllerRepresentable
Bädda in fullständiga UIKit-vykontrollers, som UIImagePickerController, i SwiftUI.
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.
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
- UIViewRepresentable: omsluta UIKit-vyer
- Coordinator-mönstret för delegate-kommunikation
- UIViewControllerRepresentable
- UIHostingController: SwiftUI i UIKit