0Pricing
Swift Academy · บทเรียน

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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. UIViewRepresentable: ห่อหุ้ม View ของ UIKit
  2. รูปแบบ Coordinator สำหรับการสื่อสารกับผู้รับมอบหมาย
  3. UIViewControllerRepresentable
  4. UIHostingController: SwiftUI ภายใน UIKit
← กลับไปที่ Swift Academy