UIViewControllerRepresentable
Osadzanie kompletnych kontrolerów widoków UIKit, takich jak UIImagePickerController, w SwiftUI.
UIViewControllerRepresentable to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Swift Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Swift Academy zawiera 4 lekcji w sumie.
Czym jest UIViewControllerRepresentable
Podobnie jak UIViewRepresentable, ale opakowuje cały UIViewController do użycia wewnątrz SwiftUI.
struct ImagePickerView: UIViewControllerRepresentable {
@Binding var image: UIImage?
}makeUIViewController
Utwórz i skonfiguruj kontroler widoku UIKit. Metoda jest wywoływana raz, gdy SwiftUI po raz pierwszy renderuje obiekt representable.
func makeUIViewController(context: Context) -> UIImagePickerController {
let vc = UIImagePickerController()
vc.delegate = context.coordinator
return vc
}updateUIViewController
Metoda jest wywoływana za każdym razem, gdy zmieni się stan SwiftUI. Przekaż zaktualizowane wartości do istniejącego kontrolera widoku.
func updateUIViewController(_ vc: UIImagePickerController, context: Context) {
// Update vc if needed (e.g., change source type)
}dismantleUIViewController
Statyczna metoda czyszczenia wywoływana przed usunięciem kontrolera widoku z hierarchii.
static func dismantleUIViewController(_ vc: UIImagePickerController, coordinator: Coordinator) {
vc.dismiss(animated: false)
}Opakowywanie UIDocumentPickerViewController
Przykład: opakuj picker dokumentów, aby umożliwić użytkownikom wybieranie plików i przekazywanie adresów URL z powrotem do 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) {}
}Prezentowanie modalne
Umieść UIViewControllerRepresentable wewnątrz .sheet, aby wyświetlić go modalnie.
@State private var showPicker = false
var body: some View {
Button("Pick Image") { showPicker = true }
.sheet(isPresented: $showPicker) {
ImagePickerView(image: $selectedImage)
}
}Przykład kompozytora wiadomości
Opakuj MFMailComposeViewController, aby prezentować arkusz tworzenia wiadomości z poziomu 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) {}
}Wyświetlanie na pełnym ekranie
Zastosuj .fullScreenCover do kontrolerów widoku, które muszą wypełniać cały ekran.
.fullScreenCover(isPresented: $showCamera) {
CameraViewController()
}Przekazywanie domknięć jako wywołań zwrotnych
Zamiast powiązań przekazuj do obiektu representable domknięcia jako wywołania zwrotne informujące o zdarzeniach.
struct VideoPlayer: UIViewControllerRepresentable {
let url: URL
var onFinish: () -> Void
// Coordinator calls onFinish when playback ends
}Wewnętrzny rozmiar
Kontrolery widoku UIKit określają własny rozmiar. Użyj modyfikatorów ramki SwiftUI albo preferowanego rozmiaru zawartości kontrolera widoku.
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) {}
}Typowe zastosowania
UIViewControllerRepresentable jest często używany dla: UIImagePickerController, MFMailComposeViewController, AVPlayerViewController, UIDocumentPickerViewController i SFSafariViewController.
import SafariServices
struct SafariView: UIViewControllerRepresentable {
let url: URL
func makeUIViewController(context: Context) -> SFSafariViewController {
SFSafariViewController(url: url)
}
func updateUIViewController(_ vc: SFSafariViewController, context: Context) {}
}Szybkie sprawdzenie
Jaka metoda jest wywoływana przez SwiftUI za każdym razem, gdy zmieniają się dane wejściowe SwiftUI obiektu representable?
Podsumowanie lekcji
UIViewControllerRepresentable opakowuje pełne kontrolery widoku UIKit. Zaimplementuj makeUIViewController (utworzenie raz), updateUIViewController (synchronizacja stanu) oraz opcjonalnie dismantleUIViewController (czyszczenie). Użyj Coordinator do obsługi wywołań zwrotnych delegatów.
Często zadawane pytania
Czy lekcja „UIViewControllerRepresentable” jest bezpłatna?
Tak — pełny tekst „UIViewControllerRepresentable” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Swift Academy, przejdź na CoddyKit PRO. Kurs Swift Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „UIViewControllerRepresentable”?
Osadzanie kompletnych kontrolerów widoków UIKit, takich jak UIImagePickerController, w SwiftUI. Ćwiczysz Swift Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Swift Academy?
Nie wymagamy żadnego doświadczenia. Swift Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „UIViewControllerRepresentable”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Swift Academy?
Tak. Każda lekcja Swift Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- UIViewRepresentable: opakowywanie widoków UIKit
- Wzorzec Coordinator do komunikacji z delegatem
- UIViewControllerRepresentable
- UIHostingController: SwiftUI wewnątrz UIKit