如何使用 AppDelegate 在视图之间共享 iAd 横幅

Posted

技术标签:

【中文标题】如何使用 AppDelegate 在视图之间共享 iAd 横幅【英文标题】:How to share iAd banner between views using AppDelegate 【发布时间】:2015-03-06 17:48:04 【问题描述】:

我希望在我的应用中实施 iAd。到目前为止,我已经设法使用下面的方法让它们在每个视图中正确显示/消失。

应用代理:

import UIKit

import iAd
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate 

    var window: UIWindow?

    var adBannerView = ADBannerView()

查看控制器 1:

import UIKit
import iAd

class HomeScreenViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, ADBannerViewDelegate 

let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate //Creates reference to the AppDelegate

    override func viewDidLoad() 
        super.viewDidLoad()
        loadAds()        
    
    func loadAds()
        self.appDelegate.adBannerView.removeFromSuperview()
        self.appDelegate.adBannerView.delegate = nil
        self.appDelegate.adBannerView = ADBannerView(frame: CGRect.zeroRect)
        self.appDelegate.adBannerView.center = CGPoint(x: view.bounds.size.width / 2, y: view.bounds.size.height - self.appDelegate.adBannerView.frame.size.height / 2)
        self.appDelegate.adBannerView.delegate = self
        self.appDelegate.adBannerView.hidden = true
        view.addSubview(self.appDelegate.adBannerView)
    
    func bannerViewDidLoadAd(banner: ADBannerView!) 
        println("bannerViewDidLoadAd")
        self.appDelegate.adBannerView.hidden = false
    
    func bannerViewActionDidFinish(banner: ADBannerView!) 
        println("bannerViewActionDidFinish")
    
    func bannerView(banner: ADBannerView!, didFailToReceiveAdWithError error: NSError!) 
        println("didFailToReceiveAdWithError")
        self.appDelegate.adBannerView.hidden = true
    

我的目标是在多个视图中显示相同的广告,用户可以在这些视图之间切换。但是,在实践中,当您从一个视图切换到另一个视图时,广告似乎会停止加载并必须重新开始。有没有更简单的方法可以将此 adBannerView 从一个 VC 传递到另一个?

任何帮助将不胜感激。 谢谢!

【问题讨论】:

您可能对this 示例感兴趣。在这里,我将 iAD 设为全局,根本不涉及 AppDelegate。 【参考方案1】:

排队

self.appDelegate.adBannerView = ADBannerView(frame: CGRect.zeroRect)

您正在创建一个新的 ADBannerView 实例并丢弃旧的实例。所以你没有共享视图对象,只是变量。 删除此行。完成此操作后,

self.appDelegate.adBannerView.delegate = nil

没有任何意义,因为您稍后将其设置为self。也删除它。

另见https://developer.apple.com/library/ios/technotes/tn2286/_index.html

【讨论】:

以上是关于如何使用 AppDelegate 在视图之间共享 iAd 横幅的主要内容,如果未能解决你的问题,请参考以下文章

如何在 AppDelegate 和 ViewController 之间共享属性,并在 App 终止前保存

视图 UIApplication 之间的数据

在 appdelegate 和视图控制器中访问的同一数据库之间的一致性

SwiftUI之如何使用@EnvironmentObject在视图之间共享数据

如何在两个活动之间共享一个视图?

如何在 SwiftUI 中创建共享导航栏以在多个视图之间进行交互? [关闭]