UIViewRepresentable: ห่อหุ้ม View ของ UIKit
ใช้งาน makeUIView, updateUIView และการถอด View ของ UIKit ใน SwiftUI
UIViewRepresentable: ห่อหุ้ม View ของ UIKit เป็นบทเรียน Swift Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Swift Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน
เหตุใดจึงต้องใช้ UIViewRepresentable
วิว UIKit จำนวนมากยังไม่มีสิ่งเทียบเท่าใน SwiftUI UIViewRepresentable จึงทำหน้าที่เชื่อมวิว UIKit เข้ากับ SwiftUI
import SwiftUI
import UIKit
struct WebView: UIViewRepresentable {
let url: URL
// ...
}เมธอดที่จำเป็น
ใช้งาน makeUIView เพื่อสร้างวิว และ updateUIView เพื่อซิงค์การเปลี่ยนแปลงสถานะของ SwiftUI
func makeUIView(context: Context) -> WKWebView {
WKWebView()
}
func updateUIView(_ uiView: WKWebView, context: Context) {
uiView.load(URLRequest(url: url))
}ตัวอย่าง WebView ฉบับสมบูรณ์
ตัวอย่าง UIViewRepresentable ฉบับสมบูรณ์ที่ห่อหุ้ม WKWebView เพื่อแสดงเนื้อหาเว็บใน SwiftUI
struct WebView: UIViewRepresentable {
let url: URL
func makeUIView(context: Context) -> WKWebView { WKWebView() }
func updateUIView(_ uiView: WKWebView, context: Context) {
uiView.load(URLRequest(url: url))
}
}การใช้ใน SwiftUI
ใช้วิวที่ห่อหุ้มไว้ได้เช่นเดียวกับวิวของ SwiftUI และใช้ตัวปรับแต่งตามปกติ
WebView(url: URL(string: "https://apple.com")!)
.frame(height: 400)
.cornerRadius(12)การส่งข้อมูลเข้าไป
ส่งข้อมูลจาก SwiftUI ไปยัง UIKit ผ่านคุณสมบัติที่จัดเก็บไว้ของ representable แล้วอัปเดตใน updateUIView
struct MapView: UIViewRepresentable {
var region: MKCoordinateRegion
func makeUIView(context: Context) -> MKMapView { MKMapView() }
func updateUIView(_ uiView: MKMapView, context: Context) {
uiView.setRegion(region, animated: true)
}
}การถอดวิว UIKit
ใช้งาน dismantleUIView ซึ่งเป็นเมธอดเสริม เพื่อทำความสะอาดทรัพยากร เช่น ตัวสังเกตการณ์ เมื่อวิวถูกนำออก
static func dismantleUIView(_ uiView: WKWebView, coordinator: Coordinator) {
uiView.stopLoading()
}พารามิเตอร์ Context
context ให้เข้าถึง coordinator, environment และธุรกรรมของแอนิเมชัน
func updateUIView(_ uiView: MKMapView, context: Context) {
print(context.environment.colorScheme) // .light or .dark
}ค่าจากสภาพแวดล้อมใน UIViewRepresentable
อ่านค่าจากสภาพแวดล้อมของ SwiftUI ผ่าน context.environment เพื่อปรับการกำหนดค่าของ UIKit
if context.environment.colorScheme == .dark {
uiView.overrideUserInterfaceStyle = .dark
}การกำหนดขนาดวิว UIKit
UIViewRepresentable ใช้ขนาดเนื้อหาภายในหรือใช้ตัวปรับแต่งเฟรมของ SwiftUI ให้ใช้งาน sizeThatFits สำหรับการกำหนดขนาดแบบกำหนดเอง
func sizeThatFits(_ proposal: ProposedViewSize, uiView: WKWebView, context: Context) -> CGSize? {
CGSize(width: proposal.width ?? 300, height: 400)
}การหลีกเลี่ยงผลข้างเคียงของ makeUIView
ให้ makeUIView ทำงานแบบบริสุทธิ์ — สร้างและกำหนดค่าเท่านั้น ส่วนการอัปเดตที่ขับเคลื่อนด้วยสถานะให้ใส่ไว้ใน updateUIView
// WRONG:
func makeUIView(context: Context) -> MKMapView {
let v = MKMapView()
v.setRegion(region, animated: false) // belongs in updateUIView
return v
}วิวที่ห่อหุ้มโดยทั่วไป
วิว UIKit ที่มักห่อหุ้มด้วย UIViewRepresentable ได้แก่ WKWebView, MKMapView, UITextView, UIImagePickerController และ AVPlayerLayer
// UITextView with custom toolbar
struct RichTextEditor: UIViewRepresentable {
@Binding var text: String
// makeUIView, updateUIView, Coordinator...
}ตรวจสอบความเข้าใจ
เมธอดใดใน UIViewRepresentable ที่ถูกเรียกเพื่อซิงค์สถานะของ SwiftUI เข้ากับวิว UIKit หลังจากสร้างวิวครั้งแรก
สรุปบทเรียน
UIViewRepresentable ต้องมี makeUIView (สร้างครั้งเดียว) และ updateUIView (ซิงค์เมื่อสถานะเปลี่ยนแปลง) ใช้ context.environment เพื่อปรับการแสดงผล และทำความสะอาดใน dismantleUIView ใช้ตัวปรับแต่งเฟรมของ SwiftUI เพื่อควบคุมขนาด
คำถามที่พบบ่อย
บทเรียน “UIViewRepresentable: ห่อหุ้ม View ของ UIKit” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “UIViewRepresentable: ห่อหุ้ม View ของ UIKit” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Swift Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “UIViewRepresentable: ห่อหุ้ม View ของ UIKit”
ใช้งาน makeUIView, updateUIView และการถอด View ของ UIKit ใน SwiftUI คุณปฏิบัติ Swift Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Swift Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Swift Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “UIViewRepresentable: ห่อหุ้ม View ของ UIKit” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Swift Academy นี้ได้ไหม
ได้ บทเรียน Swift Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- UIViewRepresentable: ห่อหุ้ม View ของ UIKit
- รูปแบบ Coordinator สำหรับการสื่อสารกับผู้รับมอบหมาย
- UIViewControllerRepresentable
- UIHostingController: SwiftUI ภายใน UIKit