Search code examples
iosswiftiad

Shared iAd banner


I am making the iAds in my app to be loaded in the app delegate. It loads fine however in the view controllers, it will not show. My code in the app delegate to declare the ad is var UIiAd: ADBannerView = ADBannerView() My code in the view controller is

class HelpViewController: UIViewController, ADBannerViewDelegate {
    //MARK: - Properties
    var UIiAd: ADBannerView = ADBannerView()
    //MARK: - did something
    override func viewDidLoad() {
        super.viewDidLoad()


        // Do any additional setup after loading the view.
    }

    override func viewWillAppear(animated: Bool) {
        //super.viewWillAppear(animated)
        let ScreenHeight = UIScreen.mainScreen().bounds.height

        UIiAd.delegate = self
        UIiAd = self.appDelegate().UIiAd
        UIiAd.frame = CGRectMake(0, ScreenHeight - 50, 0, 0)
        UIiAd.hidden = true
        self.view.addSubview(UIiAd)
    }

    override func viewWillDisappear(animated: Bool) {
        UIiAd.delegate = nil
        UIiAd.removeFromSuperview()
    }



    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    //MARK: - iAd
    func bannerViewDidLoadAd(banner: ADBannerView!) {
        UIView.beginAnimations(nil, context: nil)
        UIView.setAnimationDuration(1)
        UIiAd.hidden = false
        UIView.commitAnimations()
        print("Did load ad")
    }

    func bannerView(banner: ADBannerView!, didFailToReceiveAdWithError error: NSError!) {
        UIView.beginAnimations(nil, context: nil)
        UIView.setAnimationDuration(0)
        UIiAd.hidden = true
        UIView.commitAnimations()
        print("Did fail to receive ad with error \(error)")
    }

    //MARK: - Functions
    func appDelegate() -> AppDelegate {
        return UIApplication.sharedApplication().delegate as! AppDelegate
    }
}

What seems to be the problem is, bannerViewDidLoadAd doesn't ever get called. How would I unhide the banner if it loads?


Solution

  • I have actually fixed this. What you need to do in the app delegate is class AppDelegate: UIResponder, UIApplicationDelegate, ADBannerViewDelegate Then you want to make a bool that changes if the ad is loaded Then you want to add the function func bannerViewDidLoadAd(banner: ADBannerView!) { adLoaded = true } This will change the value when the ad is loaded Then in your view controller you want to do

    override func viewWillAppear(animated: Bool) {
        //super.viewWillAppear(animated)
        let ScreenHeight = UIScreen.mainScreen().bounds.height
    
        UIiAd.delegate = self
        UIiAd = self.appDelegate().UIiAd
        UIiAd.frame = CGRectMake(0, ScreenHeight - 50, 0, 0)
        canDisplayBannerAds = true
        if appDelegate().adLoaded == true {
        self.view.addSubview(UIiAd)
        }
    }
    

    This will add the ad to your view controller will not if the ad is not loaded