У меня есть 5-tab UITabBarController
, где каждая вкладка является UIViewController
. Первая вкладка называется Timeline
, вторая называется Person
, а последняя вкладка называется More
.Удаление AdBannerView из UIViewController из IAP без необходимости перезапуска приложения
Я реализовал In-App Purchase
с с моим приложением, где перед IAP
, пользователь может не изменять темы, например, и т.д. Одна из вещей, которые я подвожу к этой версии извлекая iAds
с IAP
.
Так Timeline
имеет AdBannerView
на дне до IAP
было сделано, и как только IAP
было закуплено на вкладке More
, я ожидал AdBannerView
быть удалены из Timeline
сразу.
Выпуск
Что на самом деле происходит сейчас, я иду на вкладку More
, купить IAP
и вернуться к Timeline
и AdBannerView
все еще там. Если я перейду с вкладки Timeline
на вкладку Person
и обратно на вкладку Timeline
, удаляется AdBannerView
. Или, если я повторно запустил приложение после IAP
, AdBannerView
удаляется из Timeline
. В любом случае, это не делает то, что я ожидаю, а именно для удаления AdBannerView
при первом обращении к вкладке Timeline
с вкладки More
после IAP
.
Вот код:
- (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
и на этот раз, я получаю NSLog
PRO
потому что NSUserDefault
IAPSuccessful
теперь является истинным (что делается при покупка проходит).
Однако на данный момент AdBannerView
по-прежнему отображается.
То, что я пытался
Я пытался несколько вещей, чтобы попытаться получить эту работу:
- Создать
NSNotification
когда покупка проходит с слушателя вviewWillAppear
методTimeline
вкладка. В этом методе установитеself.adBanner
наnil
, удалите его из надзора и т. Д. Селектор запускается сNotification
(доviewWillAppear
), но ничего не происходит. - Я попытался
self.adBanner.delegate = self; self.adBanner = nil; [self.adBanner removeFromSuperview];
и т.д., и это тот же самый - Я попытался
[self.timelineTableView reloadData];
- Вслед за этим аналогичный вопрос SO (Reloading an SKScene or View to remove iAd after In App Purchase), я даже попытался установить Ивар никакого эффекта.
- Я пробовал разместить
self.adBanner
на экране, но то же самое происходит; когда загружается временная шкала,AdBannerView
все еще там, пока я не уеду в другое место.
У меня есть viewWillDisappear
следующим образом:
- (void)viewWillDisappear:(BOOL)animated
{
self.adBanner.delegate = nil;
self.adBanner=nil;
[self.adBanner removeFromSuperview];
}
Это делается с целью использования Shared AdBannerViews
. self.adBanner
- это свойство, созданное в файле .h, и я использую @synthesize adBanner = _adBanner
в файле .m.
Любые рекомендации по этому вопросу действительно будут оценены.