【发布时间】:2020-10-07 14:47:16
【问题描述】:
我有一个使用@State 变量显示工作表的 SwiftUI 视图:
import SwiftUI
struct AdRevenue: View {
@State var playAd = false
@Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
var body: some View {
Button(action: {
self.playAd = true
})
{
Text("Play Ad")
}.sheet(isPresented: $playAd) {
Ads()}
}
}
这是 UIViewRepresentable 表:
struct Ads: UIViewControllerRepresentable {
@Environment(\.presentationMode) var presentationMode
typealias UIViewControllerType = UIViewController
func makeUIViewController(context: Context) -> UIViewController {
return ViewController()
}
func updateUIViewController(_ uiView: UIViewController, context: Context) {
}
class ViewController: UIViewController, GADRewardedAdDelegate, AdManagerRewardDelegate {
var rewardedAd: GADRewardedAd?
@Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
override func viewDidLoad() {
super.viewDidLoad()
AdManager.shared.loadAndShowRewardAd(AdIds.rewarded.rawValue, viewController: self)
AdManager.shared.delegateReward = self
}
func rewardedAd(_ rewardedAd: GADRewardedAd, userDidEarn reward: GADAdReward) {
print("Reward received: \(reward.type), amount \(reward.amount).")
}
}
}
在 AdManager 中,这样调用函数:
func rewardAdDidClose() {
let mom = Ads()
mom.presentationMode.wrappedValue.dismiss()
print("mom.presentationMode.wrappedValue.dismiss()")
}
虽然我在运行它时看到了presentationMode 消息,但工作表并没有被关闭。是否可以像这样关闭工作表?
【问题讨论】:
-
尝试将演示模式传递给工作表中的广告:
Ad().environment(\.presentationMode, self.presentationMode) -
@BokuWaTaka 我收到错误消息:“键路径值类型 'WritableKeyPath
>' 无法转换为上下文类型 'KeyPath >'”
标签: ios swift uikit swiftui modalviewcontroller