как добавить adbannerview в UISplitviewController - PullRequest
2 голосов
/ 19 января 2011

Я сделал приложение для ipad, используя UISplitViewController, который работает в обеих ориентациях.Теперь я хочу добавить баннеры в это приложение.Как мне это сделать?В конструкторе интерфейсов я могу только добавить баннер portait в detailView, который работает более или менее, но когда я поворачиваю iPad и нажимаю на баннер, он открывается в портретном режиме, а не в альбомном режиме.И баннер никогда не сможет получить предписанную ширину для режима ipad-landscape.

Пытаясь сделать это программно, он говорит мне, что родителем adbannerview должен быть UIViewController.

Ответы [ 4 ]

2 голосов
/ 11 июня 2014

Эта та же самая проблема сводила меня с ума целую вечность, пока я не нашел образец iAdSuite.Итак, подробнее об ответе Эррана: используйте пример кода iAdSuite от Apple.

Получите работающее приложение с разделенным видом, используя раскадровки.

Включите iAd Framework.

Скопируйте файлы BannerViewController.h и .m в свое приложение.Затем в AppDelegate.m в «application didFinishLaunching» скопируйте строку из AppDelegate iAdSuite в соответствии с последней строкой здесь:

if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
{
    UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController;
    UINavigationController *navigationController = [splitViewController.viewControllers lastObject];
    splitViewController.delegate = (id)navigationController.topViewController;
    UINavigationController *masterNavigationController = splitViewController.viewControllers[0];

    _bannerViewController = [[BannerViewController alloc] initWithContentViewController:splitViewController];

В разделе для iPhone вам нужна эта строка:

_bannerViewController = [[BannerViewController alloc] initWithContentViewController:navigationController];

Непосредственно перед оператором возврата добавьте это

self.window.rootViewController = _bannerViewController;

Добавьте это в начало .m

@implementation AppDelegate{
BannerViewController *_bannerViewController;}

#import "BannerViewController.h"

Или создайте свойство bannerViewController любым удобным для вас способом.

Изменить .h следующим образом:

#import <UIKit/UIKit.h> 
@class BannerViewController;
@interface AppDelegate : UIResponder <UIApplicationDelegate>

Этого было достаточно, чтобы все это заработало.Теперь целое приложение с разделенным видом работает внутри BannerView.Это обрабатывает все функции AdBannerDelegate.

Удачи: -)

2 голосов
/ 07 июня 2012

В примере кода iAdSuite Apple есть реализация контроллера iAd с разделенным видом, которую вы можете легко добавить в свое приложение. : ^)

1 голос
/ 16 июля 2012

Я взял ответ @ ipwnstuff немного дальше.

первое предупреждение: iAd позволяет отображать только «портрет» или «пейзаж», а на iPad это означает 768x66 или 1024x66 соответственно. это означает, что нет возможности ограничить ADBannerView только подробным представлением UISplitViewController, если только вы не хотите свернуть свое собственное представление с немного более широким представлением (и, следовательно, немного более узким представлением masterViewController. иди по этому маршруту.

второе предостережение, iAdSuite материал, на который указывает @ipwnstuff, не сразу подходит для раскадровки. он создает UISplitViewController программно, и вы должны предоставить мастер и детали либо через .XIB, либо программно. Так как у меня была рабочая раскадровка, в которую я хотел интегрировать iAds, я хотел расширить ее. Кроме того, решение iAdSuite не скрывает основной вид в портретном режиме, и я все еще хотел это.

итак ... запуск существующего файла iPad.storyboard, а затем интеграция с образцом SplitBanner из iAdSuite следующим образом:

    UISplitViewController *splitViewController = (id)self.window.rootViewController;
    splitViewController.delegate = (id)splitViewController.detailUIViewController;
    CGRect splitViewFrame = splitViewController.view.frame;
        splitViewFrame.origin.y -= application.statusBarFrame.size.height;
        splitViewFrame.size.height += application.statusBarFrame.size.height;
    splitViewController.view.frame = splitViewFrame;

    // initWithContentViewController: the thing that's in the iAdSuite SplitViewBanner example
    self.bannerViewController
      = [[BannerViewController alloc] initWithContentViewController:splitViewController];
    self.window.rootViewController = self.bannerViewController;

Таким образом, я смог использовать раскадровку UISplitViewController в качестве дочернего контроллера BannerViewController, предоставляемого iAdSuite .

хорошо, третье предостережение: есть один глюк, и это то, что, если у вас установлена ​​обычная настройка кнопок с помощью splitViewControllerDelegate, делегат не будет вызываться, если вы будете поворачиваться во время объявления, и поэтому кнопка будет временно отображаться когда он не должен или не появляется, когда должен.

0 голосов
/ 20 января 2011

Сначала это выглядит так, будто вы забыли раскомментировать или реализовать переменную shouldAutorotateToInterfaceOrientation ... Но я не совсем уверен.Что происходит, когда вы нажимаете на баннер?Открывает ли он новый вид и UIWebView или что-то?Или что-то другое?И когда мы сейчас говорим о баннерах AD, вам, вероятно, следует подумать о внедрении Apples iAd Service.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...