2016-02-22 103 views
0

我有兩個視圖控制器imageViewController和InfoViewController。我希望我的廣告展示當後退按鈕,用戶點擊來自InfoViewController顯示Admob插頁式導航後退按鈕時按iOS Swift

class imageViewController: UIViewController , GADInterstitialDelegate { 
    var interstitial: GADInterstitial! 
override func viewDidLoad() { 

     self.interstitial = self.createAndLoadInterstitial() 
     super.viewDidLoad() 
} 
func createAndLoadInterstitial() -> GADInterstitial { 
     let interstitial: GADInterstitial = GADInterstitial(adUnitID: "ca-app-pub-3940256099942544/4411468910") 
     interstitial.delegate = self 
     let request = GADRequest() 
     interstitial.loadRequest(request) 
     print("req sent") 
     return interstitial 
    } 
    func interstitialDidReceiveAd(ad: GADInterstitial!) { 
     if (interstitial.isReady) { 
      print("ad ready") 
      interstitial.presentFromRootViewController(self) 
     }} 
    func interstitialDidDismissScreen(interstitial: GADInterstitial) { 
    } 

我應該如何與後退按鈕點擊從infoViewController到ImageViewCroller調用它。我也沒有解決這個問題與全球變數,因爲我是新來的iOS

回答

0

我會建議調用它在UIViewController的方法之一。例如:

isMovingFromParentViewController() 

請參閱documentation

編輯:

其實,如果你想有一個VC作爲一個代表,你應該從父VC調用它,否則,你將通過與後退按鈕彈出它失去了委託。

你可以用幾種方法做到這一點。一個是使用closure。在這裏,你會放在第一個VC回調方法,並有像這樣在你的第二個VC屬性:

var onBack:()->()? 

而且你需要設置它的值表示當第二VC(例如在prepareForSegue法) :

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if let destination = segue.destinationViewController as? InfoViewController { 
     destination.onBack = {()->() in 
      self.createAndLoadInterstitial() 
     } 
    } 
} 

然後,在第二視圖控制器執行以下操作:

override func isMovingFromParentViewController() -> Bool { 
    onBack?() 
} 

即不順便說一句測試:)

+0

感謝Konrad的重播。我打電話 self.interstitial = self.createAndLoadInterstitial() 雖然在infoVC中創建退出按鈕,但仍然面臨同樣的問題,你可以指導我更具體嗎? –

+0

好的,這樣可能無法正常工作,因爲按下「後退」按鈕,您會彈出VC並同時彈出插頁式代理。因此,無論您是處理插頁式廣告還是全球可訪問的課程,都可以從父VC中調用。讓我編輯我的答案。 –

+0

我得到的錯誤「類infoViewController」沒有初始化「 –

1

它只是背部按

var interstitial: GADInterstitial! 
    var showAd = true 
viewdidload { 
self.createandLoadInterstitial() 
} 
func createAndLoadInterstitial() { 
     interstitial = GADInterstitial(adUnitID: "ca-app-pub-3940256099942544/4411468910") 
     interstitial.delegate = self 
     let request = GADRequest() 
     interstitial.loadRequest(request) 

    } 
override func viewDidAppear(animated: Bool) { 
     if (interstitial.isReady && showAd) { 
      showAd = false 
      print("iterstitalMain is ready") 
      interstitial.presentFromRootViewController(self) 
      self.createAndLoadInterstitial() 
     } 
     else{ 
     showAd = true 
     } 

    } 
2

最簡單的給我回檢測按下iOS和顯示在backPressed AdMob插頁式廣告是在我childViewController使用willMoveToParentViewControllerdidMoveToParentViewController,你的情況InfoViewController方式顯示廣告。

我在appDelegate上創建了我的interstitial admob插頁式實例。所以,我可以使用它在全球範圍內,只使用一個實例/共享實例(我認爲)

然後只需要撥打willMoveToParentViewControllerdidMoveToParentViewController像這樣。兩者幾乎相同。 (willMoveToParentViewController只會提前叫(我的觀察:廣告將同時didMoveToParentViewController轉變回)顯示(我的觀察:廣告會顯示在完全轉變回))

override func willMoveToParentViewController(parent: UIViewController?) { 
    super.willMoveToParentViewController(parent) 
    if parent == nil { 
     appDelegate.showInterstitialAd() 
    } 
} 

override func didMoveToParentViewController(parent: UIViewController?) { 
    super.didMoveToParentViewController(parent) 
    if parent == nil { 
     appDelegate.showInterstitialAd() 
    } 

} 

得到了從這個答案的想法。 https://stackoverflow.com/a/17551952

PS。調用interstitial.presentFromRootViewController(self) on interstitialDidReceiveAd`並不是調用它的最佳方式,因爲它在顯示時沒有控制權。

+0

謝謝,我將在下次使用 –

0

完美測試添加插頁式廣告的代碼。在後退按鈕。 在secondviewController中添加此代碼。無需在FirstViewcontroller中添加任何內容。

func createAndLoadInterstitial() { 
    interstitial = GADInterstitial(adUnitID: "your id") 
    interstitial.delegate = self 
    let request = GADRequest() 
    interstitial.loadRequest(request) 

} 
override func viewWillDisappear(animated: Bool) { 
    if (interstitial.isReady && showAd) { 
     showAd = false 
     print("iterstitalMain is ready") 
     interstitial.presentFromRootViewController(parentViewController!) 
     self.createAndLoadInterstitial() 
    } 
    else{ 
    } 
}