UIHostingController: SwiftUI ภายใน UIKit
ฝัง View ของ SwiftUI ลงในแอป UIKit ด้วย UIHostingController
UIHostingController: SwiftUI ภายใน UIKit เป็นบทเรียน Swift Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Swift Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน
UIHostingController คืออะไร
UIHostingController คือตัวควบคุมมุมมองของ UIKit ที่ใช้โฮสต์ลำดับชั้นมุมมองของ SwiftUI
import SwiftUI
let swiftUIView = Text("Hello from SwiftUI")
let hostingVC = UIHostingController(rootView: swiftUIView)การฝังใน UIViewController
เพิ่มตัวควบคุมโฮสต์เป็นตัวควบคุมมุมมองลูก โดยใช้ API มาตรฐานสำหรับ VC ลูก
class MyViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let child = UIHostingController(rootView: ContentView())
addChild(child)
view.addSubview(child.view)
child.view.frame = view.bounds
child.didMove(toParent: self)
}
}การจัดวางอัตโนมัติด้วยตัวควบคุมโฮสต์
กำหนดข้อจำกัดการจัดวางอัตโนมัติให้กับมุมมองของตัวควบคุมโฮสต์ เพื่อผสานเข้ากับการจัดวางของ UIKit
child.view.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
child.view.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor),
child.view.leadingAnchor.constraint(equalTo: view.leadingAnchor),
child.view.trailingAnchor.constraint(equalTo: view.trailingAnchor),
child.view.bottomAnchor.constraint(equalTo: view.bottomAnchor)
])การอัปเดตมุมมองราก
อัปเดตมุมมอง SwiftUI ที่โฮสต์อยู่โดยกำหนดค่า rootView ให้กับตัวควบคุมโฮสต์
let hostingVC = UIHostingController(rootView: MyView(count: 0))
// Later:
hostingVC.rootView = MyView(count: 5)การแสดงแบบโมดัล
แสดงตัวควบคุมโฮสต์เช่นเดียวกับโมดัลของ UIKit และนำเนื้อหา SwiftUI มาใช้ในการแสดงผลของ UIKit
let vc = UIHostingController(rootView: MySwiftUIView())
present(vc, animated: true)การผลักเข้าสแต็กการนำทาง
ผลักตัวควบคุมโฮสต์เข้าไปใน UINavigationController เพื่อไปยังเนื้อหา SwiftUI จาก UIKit
let vc = UIHostingController(rootView: DetailView())
navigationController?.pushViewController(vc, animated: true)การแชร์ข้อมูลผ่าน ObservableObject
ส่ง ObservableObject ที่ใช้ร่วมกันเข้าไปในสภาพแวดล้อมของมุมมอง SwiftUI เพื่อให้ข้อมูลไหลได้สองทาง
let model = SharedModel()
let vc = UIHostingController(rootView: SwiftUIView().environmentObject(model))
// Changes to model in UIKit update SwiftUI and vice versaการกำหนดขนาดตัวควบคุมโฮสต์
ใช้ sizeThatFits เพื่อคำนวณขนาดตามธรรมชาติของเนื้อหา SwiftUI สำหรับฝังในมุมมองเลื่อน
let size = hostingVC.sizeThatFits(in: CGSize(width: 320, height: UIView.layoutFittingCompressedSize.height))
hostingVC.view.frame.size = sizeรูปลักษณ์และสไตล์
กำหนด overrideUserInterfaceStyle ให้กับตัวควบคุมโฮสต์ เพื่อควบคุมโหมดมืดหรือสว่างแยกจากส่วนอื่น
hostingVC.overrideUserInterfaceStyle = .darkการตั้งค่าแอปแบบใช้ฉาก
ในแอปที่ใช้ UIKit เป็นหลัก คุณสามารถแทนที่ตัวควบคุมมุมมองรากด้วยตัวควบคุมโฮสต์ เพื่อทยอยย้ายระบบได้
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options: UIScene.ConnectionOptions) {
guard let windowScene = scene as? UIWindowScene else { return }
let window = UIWindow(windowScene: windowScene)
window.rootViewController = UIHostingController(rootView: ContentView())
self.window = window
window.makeKeyAndVisible()
}กรณีการใช้งาน
UIHostingController เหมาะอย่างยิ่งสำหรับการย้ายระบบทีละส่วน โดยคงการนำทางของ UIKit ไว้และฝังหน้าจอฟีเจอร์ใหม่ที่สร้างด้วย SwiftUI
// UIKit app gradually migrated:
// - Old screens: UIViewController
// - New screens: UIHostingController(rootView: NewFeatureView())ตรวจสอบความเข้าใจ
คุณใช้คลาสใดของ UIKit เพื่อฝังมุมมอง SwiftUI ไว้ภายในลำดับชั้นตัวควบคุมมุมมองของ UIKit
ทบทวนบทเรียน
UIHostingController(rootView:) เชื่อม SwiftUI เข้ากับ UIKit เพิ่มเป็นตัวควบคุมมุมมองลูกด้วยข้อจำกัดการจัดวางอัตโนมัติ หรือใช้แสดงและผลักเข้าสแต็กได้ อัปเดตผ่าน rootView และแชร์ข้อมูลผ่าน ObservableObject กับ environmentObject
คำถามที่พบบ่อย
บทเรียน “UIHostingController: SwiftUI ภายใน UIKit” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “UIHostingController: SwiftUI ภายใน UIKit” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Swift Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “UIHostingController: SwiftUI ภายใน UIKit”
ฝัง View ของ SwiftUI ลงในแอป UIKit ด้วย UIHostingController คุณปฏิบัติ Swift Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Swift Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Swift Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “UIHostingController: SwiftUI ภายใน UIKit” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Swift Academy นี้ได้ไหม
ได้ บทเรียน Swift Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- UIViewRepresentable: ห่อหุ้ม View ของ UIKit
- รูปแบบ Coordinator สำหรับการสื่อสารกับผู้รับมอบหมาย
- UIViewControllerRepresentable
- UIHostingController: SwiftUI ภายใน UIKit