這篇是一個簡單介紹 UIViewControllerRepresentable
的範例,
由於 Google AdMob 的 GADBannerView
不像上次提及的 UITextField 一樣,可以直接使用 UIViewRepresentable
來包裝;原因是它必須設置一個 rootViewController
,也就意味著我們需要使用 UIViewControllerRepresentable
才能完成它。
Interfacing with UIKit
透過這個 Apple 官方的教學當中,我們可以從 UIPageViewController
的範例來做發想,故我的實作方式會是這樣:
import GoogleMobileAds
import SwiftUI
import UIKit
struct GADBannerViewController: UIViewControllerRepresentable {
func makeUIViewController(context: Context) -> UIViewController {
let view = GADBannerView(adSize: kGADAdSizeBanner)
let viewController = UIViewController()
view.adUnitID = "your ad unit id in there."
view.rootViewController = viewController
viewController.view.addSubview(view)
viewController.view.frame = CGRect(origin: .zero, size: kGADAdSizeBanner.size)
view.load(GADRequest())
return viewController
}
func updateUIViewController(_ uiViewController: UIViewController, context: Context) {}
}
如果需要處理 Delegate 的部分
你可以參閱上次 TextField 的處理方式,建構一個 Coordinator
來進行相關的作業👌
如果還有問題的話
歡迎直接透過各種方式找到我,一起來討論討論 SwiftUI 的應用👍 程式碼會同步到 GitHub 上,有任何想法都可以直接留言📒