UIViewControllerRepresentable
Menyematkan controller view UIKit lengkap seperti UIImagePickerController ke dalam SwiftUI.
UIViewControllerRepresentable adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Swift Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Swift Academy mencakup 4 pelajaran total.
Apa itu UIViewControllerRepresentable?
Seperti UIViewRepresentable, tetapi membungkus UIViewController lengkap untuk digunakan di dalam SwiftUI.
struct ImagePickerView: UIViewControllerRepresentable {
@Binding var image: UIImage?
}makeUIViewController
Buat dan konfigurasikan pengontrol tampilan UIKit. Metode ini dipanggil sekali saat SwiftUI pertama kali merender representable.
func makeUIViewController(context: Context) -> UIImagePickerController {
let vc = UIImagePickerController()
vc.delegate = context.coordinator
return vc
}updateUIViewController
Dipanggil setiap kali status SwiftUI berubah. Masukkan nilai yang diperbarui ke pengontrol tampilan yang sudah ada.
func updateUIViewController(_ vc: UIImagePickerController, context: Context) {
// Update vc if needed (e.g., change source type)
}dismantleUIViewController
Metode pembersihan statis yang dipanggil sebelum pengontrol tampilan dihapus dari hierarki.
static func dismantleUIViewController(_ vc: UIImagePickerController, coordinator: Coordinator) {
vc.dismiss(animated: false)
}Membungkus UIDocumentPickerViewController
Contoh: bungkus picker dokumen agar pengguna dapat memilih file dan meneruskan URL kembali ke 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) {}
}Menampilkan Secara Modal
Sisipkan UIViewControllerRepresentable di dalam .sheet untuk menampilkannya secara modal.
@State private var showPicker = false
var body: some View {
Button("Pick Image") { showPicker = true }
.sheet(isPresented: $showPicker) {
ImagePickerView(image: $selectedImage)
}
}Contoh Mail Composer
Bungkus MFMailComposeViewController untuk menampilkan lembar penulisan email dari 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) {}
}Tampilan Layar Penuh
Terapkan .fullScreenCover untuk pengontrol tampilan yang harus memenuhi layar.
.fullScreenCover(isPresented: $showCamera) {
CameraViewController()
}Meneruskan Closure untuk Panggilan Balik
Alih-alih Binding, teruskan panggilan balik closure ke representable untuk memberi tahu tentang peristiwa.
struct VideoPlayer: UIViewControllerRepresentable {
let url: URL
var onFinish: () -> Void
// Coordinator calls onFinish when playback ends
}Ukuran Intrinsik
Pengontrol tampilan UIKit menentukan ukurannya sendiri. Gunakan modifier frame SwiftUI atau ukuran konten pilihan milik pengontrol tampilan.
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) {}
}Kasus Penggunaan Umum
UIViewControllerRepresentable umum digunakan untuk: UIImagePickerController, MFMailComposeViewController, AVPlayerViewController, UIDocumentPickerViewController, dan SFSafariViewController.
import SafariServices
struct SafariView: UIViewControllerRepresentable {
let url: URL
func makeUIViewController(context: Context) -> SFSafariViewController {
SFSafariViewController(url: url)
}
func updateUIViewController(_ vc: SFSafariViewController, context: Context) {}
}Pemeriksaan Singkat
Metode apa yang dipanggil SwiftUI setiap kali input SwiftUI milik representable berubah?
Ringkasan Pelajaran
UIViewControllerRepresentable membungkus pengontrol tampilan UIKit lengkap. Implementasikan makeUIViewController (membuat sekali), updateUIViewController (menyinkronkan status), dan secara opsional dismantleUIViewController (pembersihan). Gunakan Coordinator untuk panggilan balik delegasi.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “UIViewControllerRepresentable” gratis?
Ya — teks lengkap “UIViewControllerRepresentable” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Swift Academy, upgrade ke CoddyKit PRO. Kursus Swift Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “UIViewControllerRepresentable”?
Menyematkan controller view UIKit lengkap seperti UIImagePickerController ke dalam SwiftUI. Kamu berlatih Swift Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Swift Academy?
Tidak diperlukan pengalaman sebelumnya. Swift Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “UIViewControllerRepresentable” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Swift Academy ini?
Ya. Setiap pelajaran Swift Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- UIViewRepresentable: Membungkus View UIKit
- Pola Coordinator untuk Komunikasi Delegate
- UIViewControllerRepresentable
- UIHostingController: SwiftUI di Dalam UIKit