如何调用插页式广告加载到另一个 UIViewController 上?
How do I call an interstitial ad to load on another UIViewController?
我有一个 UIViewController,上面显示了一个 UIView;按下 UIView 上的按钮 加载 我的插页式广告。当随后显示 UIView 时,我希望以 rootVC 作为 UIViewController 显示插页式广告。
但是,这段代码似乎没有按预期工作:
1) 我的视图控制器:
class MyViewController: UIViewController {
let button: UIButton = {
let btn = UIButton()
btn.translatesAutoresizingMaskIntoConstraints = false
btn.setTitle("BUTTON", for: .normal)
btn.addTarget(self, action: #selector(showUIView), for: .touchUpInside)
return btn
}()
@objc func showUIView(_ sender: UIButton) {
let popUp = MyUIView()
self.view.addSubview(popUp)
}
2) 我的 UIView:
class MyUIView: UIView {
var interstitial: GADInterstitial!
let button: UIButton = {
let btn = UIButton()
btn.translatesAutoresizingMaskIntoConstraints = false
btn.setTitle("UIVIEW BUTTON", for: .normal)
btn.addTarget(self, action: #selector(prepareInterstitial), for: .touchUpInside)
return btn
}()
@objc func prepareInterstitial(_ sender: UIButton) {
interstitial = GADInterstitial(adUnitID: "ca-app-pub-3940256099942544/4411468910")
let request = GADRequest()
interstitial.load(request)
dismissPopUp()
if interstitial.isReady {
interstitial.present(fromRootViewController: MyViewController())
}
}
我在控制台中得到这个:
Warning: Attempt to present <GADFullScreenAdViewController: 0x7f8611e22fc0> on <Project.MyViewController: 0x7f8612884800> whose view is not in the window hierarchy!`
我不明白,因为 MyViewController 仍然是视图层次结构的重要组成部分。
如果有人能告诉我如何解决这个错误,我将不胜感激,我对编码还比较陌生,不确定自己做错了什么。谢谢!
这不起作用的原因是因为您在此处创建全新 VC:
interstitial.present(fromRootViewController: MyViewController())
这个MyViewController()
不是屏幕上显示的VC!您刚刚通过调用其初始化程序创建。
您需要以某种方式获取屏幕上显示的 VC。一种简单的方法是将 rootVC
属性 添加到 MyUIView
:
weak var rootVC: UIViewController?
然后展示这个:
if let rootVC = self.rootVC { // nil check!
interstitial.present(fromRootViewController: rootVC)
}
在showUIView
中,将self
设为rootVC
:
@objc func showUIView(_ sender: UIButton) {
let popUp = MyUIView()
popUp.rootVC = self
self.view.addSubview(popUp)
}
我有一个 UIViewController,上面显示了一个 UIView;按下 UIView 上的按钮 加载 我的插页式广告。当随后显示 UIView 时,我希望以 rootVC 作为 UIViewController 显示插页式广告。
但是,这段代码似乎没有按预期工作:
1) 我的视图控制器:
class MyViewController: UIViewController {
let button: UIButton = {
let btn = UIButton()
btn.translatesAutoresizingMaskIntoConstraints = false
btn.setTitle("BUTTON", for: .normal)
btn.addTarget(self, action: #selector(showUIView), for: .touchUpInside)
return btn
}()
@objc func showUIView(_ sender: UIButton) {
let popUp = MyUIView()
self.view.addSubview(popUp)
}
2) 我的 UIView:
class MyUIView: UIView {
var interstitial: GADInterstitial!
let button: UIButton = {
let btn = UIButton()
btn.translatesAutoresizingMaskIntoConstraints = false
btn.setTitle("UIVIEW BUTTON", for: .normal)
btn.addTarget(self, action: #selector(prepareInterstitial), for: .touchUpInside)
return btn
}()
@objc func prepareInterstitial(_ sender: UIButton) {
interstitial = GADInterstitial(adUnitID: "ca-app-pub-3940256099942544/4411468910")
let request = GADRequest()
interstitial.load(request)
dismissPopUp()
if interstitial.isReady {
interstitial.present(fromRootViewController: MyViewController())
}
}
我在控制台中得到这个:
Warning: Attempt to present <GADFullScreenAdViewController: 0x7f8611e22fc0> on <Project.MyViewController: 0x7f8612884800> whose view is not in the window hierarchy!`
我不明白,因为 MyViewController 仍然是视图层次结构的重要组成部分。
如果有人能告诉我如何解决这个错误,我将不胜感激,我对编码还比较陌生,不确定自己做错了什么。谢谢!
这不起作用的原因是因为您在此处创建全新 VC:
interstitial.present(fromRootViewController: MyViewController())
这个MyViewController()
不是屏幕上显示的VC!您刚刚通过调用其初始化程序创建。
您需要以某种方式获取屏幕上显示的 VC。一种简单的方法是将 rootVC
属性 添加到 MyUIView
:
weak var rootVC: UIViewController?
然后展示这个:
if let rootVC = self.rootVC { // nil check!
interstitial.present(fromRootViewController: rootVC)
}
在showUIView
中,将self
设为rootVC
:
@objc func showUIView(_ sender: UIButton) {
let popUp = MyUIView()
popUp.rootVC = self
self.view.addSubview(popUp)
}