通过 Google AdMob 插页式委托​​方法传递 segue 数据

Passing segue data through a Google AdMob interstitial delegate method

我有一个应用程序有四个按钮,它们都将数据传递给模态视图控制器。这是通过为 4 个按钮分配标签,并在 prepareForSegue

中添加一些条件来实现的
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

    if segue.identifier == "modalSegue" {
        let secondViewController = segue.destinationViewController as! ModalViewController
        if sender?.tag == 1 {
            secondViewController.title = "Lawn Mowing"
        }
        else if sender?.tag == 2 {
            secondViewController.title = "Landscaping"
        }
        else if sender?.tag == 3 {
            secondViewController.title = "Hardscaping"
        }
        else if sender?.tag == 4 {
            secondViewController.title = "Tree Removal"
        }
    }
}

这是我的按钮:

@IBAction func servicesButton(sender: UIButton) {
    adCounter += 1
    if adCounter == 4 {
        adCounter = 0
        if (interstitial.isReady) {
            interstitial.presentFromRootViewController(self)
            interstitial = createAd()
        }
        else {
            self.performSegueWithIdentifier("modalSegue", sender: sender)
        }
    }
    else {
        self.performSegueWithIdentifier("modalSegue", sender: sender)
    }
}

工作完美。

当我引入 AdMob Interstitials 时问题就来了

每点击 4 个按钮(在 servicesButton 上),我就会调用插页式广告。当插页式广告关闭时(通过 interstitialDidDismissScreen),我对模态视图控制器执行 segue:

func interstitialDidDismissScreen(ad: GADInterstitial!) {
    self.performSegueWithIdentifier("modalSegue", sender: nil)
}

但是没有数据通过!! :( 模式只是在没有 secondViewController 标题的情况下加载。我相信这是因为没有发件人,它提供按钮标签并传递数据......对吗?我也尝试了 sender: self 在插页式委托​​方法中,但没有做任何事情。

在用户关闭插页式广告后如何继续将此信息传递给模态视图控制器?还是有更好的整体方法来处理这个问题?我需要在 segue 之前加载插页式广告,因为意外点击的可能性要小得多。

谢谢。如果您需要进一步的说明或问题,请告诉我。

一种解决方案是在展示插页式广告时清除 IBAction 中的计数,然后在关闭插页式广告时,如果您有 IBOutlets,则可以使用作为发件人按下的按钮调用 servicesButton 函数.

func interstitialDidDismissScreen(ad: GADInterstitial!) {
    self.servicesButton(buttonThatWasPressed) 
}

这将召回你所有的逻辑。

另一种方法是为新视图标题设置一个 class-level 变量,并在按下按钮时设置该变量,然后无论您从何处调用 presentSegue,在 prepareForSegue 中您仍然可以访问什么新标题将是。