从IAP的UIViewController中删除AdBannerView,而无需重新启动应用程序



我有一个5个选项卡的UITabBarController,其中每个选项卡都是一个UIViewController。第一个选项卡被称为Timeline,第二个选项卡被称作Person,最后一个选项卡被叫做More

我已经用我的应用程序实现了In-App Purchase,在IAP之前,用户不能更改主题等。我给这个版本带来的一件事是用IAP删除iAds

因此,在制作IAP之前,Timeline的底部有一个AdBannerView,一旦从More选项卡购买了IAP,我希望AdBannerView立即从Timeline中删除。

问题

现在实际发生的是,我转到More选项卡,购买IAP,然后回到TimelineAdBannerView仍然存在。如果我从Timeline选项卡移到Person选项卡,再移回Timeline选项卡,则会删除AdBannerView。或者,如果我在IAP之后重新启动应用程序,则AdBannerView将从Timeline中删除。无论哪种方式,它都没有达到我的预期,即在IAP之后,当我第一次从More选项卡返回Timeline选项卡时,删除AdBannerView

这里有一些代码:

- (void)displayiAdsOrNot
{
NSLog(@"Display iAds or Not");
if (![[NSUserDefaults standardUserDefaults] boolForKey:@"IAPSuccessful"])
{
NSLog(@"BASIC");
self.adBanner = [[self appdelegate] adBanners];
self.adBanner.delegate = self;
if (IDIOM == IPAD)
{
NSLog(@"*** This is the iPad ***");
[self.adBanner setFrame:CGRectMake(0, [[UIScreen mainScreen] bounds].size.height-80, 320, 50)];
[self.adBanner setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.view addSubview:self.adBanner];
NSLayoutConstraint *myConstraint =[NSLayoutConstraint
constraintWithItem:self.adBanner
attribute:NSLayoutAttributeLeading
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeLeading
multiplier:1.0
constant:0];
[self.view addConstraint:myConstraint];

myConstraint =[NSLayoutConstraint constraintWithItem:self.adBanner
attribute:NSLayoutAttributeTrailing
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeTrailing
multiplier:1
constant:0];
[self.view addConstraint:myConstraint];
myConstraint =[NSLayoutConstraint constraintWithItem:self.adBanner
attribute:NSLayoutAttributeBottom
relatedBy:NSLayoutRelationEqual
toItem:self.view
attribute:NSLayoutAttributeBottom
multiplier:1
constant:0];
[self.view addConstraint:myConstraint];
}
else
{
NSLog(@"*** THIS IS THE IPHONE ***");
[self.adBanner setFrame:CGRectMake(0, [[UIScreen mainScreen] bounds].size.height-98, 320, 50)];
[self.view addSubview:self.adBanner];
}
}
else
{
NSLog(@"PRO");
[self.adBanner removeFromSuperview];
self.adBanner = nil;
}   
}

此方法仅从viewWillAppear调用。

NSLogs为指南,在Timeline选项卡中,控制台显示BASIC。当我转到More选项卡,购买IAP并返回Timeline选项卡时,viewWillAppear再次触发,这触发了displayiAdsOrNot方法,这一次,我得到了NSLogPRO,因为NSUserDefaultIAPSuccessful现在是真的(在购买完成时完成)。

然而,在这一点上,AdBannerView仍然被显示。

我尝试过的

我一直在尝试很多方法来实现这一点:

  • 在购买完成时创建一个NSNotification,在Timeline选项卡的viewWillAppear方法中使用侦听器。在该方法中,将self.adBanner设置为nil,将其从超级视图中删除,等等。选择器会使用Notification(在viewWillAppear之前)启动,但不会发生任何不同
  • 我试过self.adBanner.delegate = self; self.adBanner = nil; [self.adBanner removeFromSuperview];等,都一样
  • 我试过[self.timelineTableView reloadData];
  • 在这个类似的SO问题(在应用内购买后重新加载SKScene或View以删除iAd)之后,我甚至尝试将ivar设置为无效
  • 我试着把self.adBanner放在屏幕外,但同样的事情正在发生;当加载Timeline时,AdBannerView仍然存在,直到我去其他地方

我有如下viewWillDisappear

- (void)viewWillDisappear:(BOOL)animated
{
self.adBanner.delegate = nil;
self.adBanner=nil;
[self.adBanner removeFromSuperview];
}

这是为了使用共享AdBannerViewsself.adBanner是在.h文件中创建的属性,我在.m文件中使用@synthesize adBanner = _adBanner

如能就此提供任何指导,我们将不胜感激。

我已经解决了这个问题。

通过删除viewWillDisappear,并在IAPSuccessfulNotification中设置self.adBanner.hidden= YES,我成功地在不重新启动应用程序的情况下删除了AdBannerView

相关内容

  • 没有找到相关文章

最新更新