UIViewControllerRepresentable
Bygg inn komplette UIKit-viewkontrollere, som UIImagePickerController, i SwiftUI.
UIViewControllerRepresentable er en gratis leksjon i Swift Academy på CoddyKit. Dette er leksjon 3 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Swift Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Swift Academy inneholder totalt 4 leksjoner.
Hva er UIViewControllerRepresentable?
I likhet med UIViewRepresentable, men pakker inn en fullstendig UIViewController for bruk i SwiftUI.
struct ImagePickerView: UIViewControllerRepresentable {
@Binding var image: UIImage?
}makeUIViewController
Opprett og konfigurer UIKit-visningskontrolleren. Kalles én gang når SwiftUI gjengir representable-objektet for første gang.
func makeUIViewController(context: Context) -> UIImagePickerController {
let vc = UIImagePickerController()
vc.delegate = context.coordinator
return vc
}updateUIViewController
Kalles hver gang SwiftUI-tilstanden endres. Overfør oppdaterte verdier til den eksisterende visningskontrolleren.
func updateUIViewController(_ vc: UIImagePickerController, context: Context) {
// Update vc if needed (e.g., change source type)
}dismantleUIViewController
Statisk oppryddingsmetode som kalles før visningskontrolleren fjernes fra hierarkiet.
static func dismantleUIViewController(_ vc: UIImagePickerController, coordinator: Coordinator) {
vc.dismiss(animated: false)
}Pakke inn UIDocumentPickerViewController
Eksempel: Pakk inn dokumentvelgeren for å la brukere velge filer og sende URL-er tilbake til 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) {}
}Presentere modalt
Legg UIViewControllerRepresentable i et .sheet for modal visning.
@State private var showPicker = false
var body: some View {
Button("Pick Image") { showPicker = true }
.sheet(isPresented: $showPicker) {
ImagePickerView(image: $selectedImage)
}
}Eksempel med e-postkomponering
Pakk inn MFMailComposeViewController for å vise et sheet for e-postskriving fra 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) {}
}Fullskjermvisning
Bruk .fullScreenCover for visningskontrollere som må fylle hele skjermen.
.fullScreenCover(isPresented: $showCamera) {
CameraViewController()
}Sende closure-tilbakekall
Send closure-tilbakekall til representable-objektet for å varsle om hendelser i stedet for å bruke Bindings.
struct VideoPlayer: UIViewControllerRepresentable {
let url: URL
var onFinish: () -> Void
// Coordinator calls onFinish when playback ends
}Innebygd størrelse
UIKit-visningskontrollere bestemmer sin egen størrelse. Bruk SwiftUI-rammemodifikatorer eller visningskontrollerens foretrukne innholdsstørrelse.
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) {}
}Vanlige bruksområder
UIViewControllerRepresentable brukes ofte for: UIImagePickerController, MFMailComposeViewController, AVPlayerViewController, UIDocumentPickerViewController og SFSafariViewController.
import SafariServices
struct SafariView: UIViewControllerRepresentable {
let url: URL
func makeUIViewController(context: Context) -> SFSafariViewController {
SFSafariViewController(url: url)
}
func updateUIViewController(_ vc: SFSafariViewController, context: Context) {}
}Kort kontroll
Hvilken metode kalles av SwiftUI hver gang representable-objektets SwiftUI-inndata endres?
Oppsummering av leksjonen
UIViewControllerRepresentable pakker inn fullstendige UIKit-visningskontrollere. Implementer makeUIViewController (oppretter én gang), updateUIViewController (synkroniserer tilstanden) og eventuelt dismantleUIViewController (rydder opp). Bruk Coordinator for delegattilbakekall.
Lær deg Swift med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 122
- Leksjoner
- 409
Ofte stilte spørsmål
Er leksjonen «UIViewControllerRepresentable» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Swift Academy, inkludert «UIViewControllerRepresentable», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Swift Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «UIViewControllerRepresentable»?
Bygg inn komplette UIKit-viewkontrollere, som UIImagePickerController, i SwiftUI. Du øver på Swift Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Swift Academy?
Ingen tidligere erfaring er nødvendig. Swift Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.
Hvor lang tid tar leksjonen «UIViewControllerRepresentable»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Swift Academy-leksjonen?
Ja. Alle Swift Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- UIViewRepresentable: pakk inn UIKit-Views
- Coordinator-mønsteret for delegate-kommunikasjon
- UIViewControllerRepresentable
- UIHostingController: SwiftUI i UIKit