Помещение ADBannerView поверх UINavigationController - PullRequest
4 голосов
/ 12 апреля 2011

Я пытаюсь разместить баннер iAd в приложении, основанном на UINavigationController (это не стандартное приложение nav-base, предложенное xcode, потому что мне не нужно представление таблицы). Я хотел бы разместить ADBanner внизу, чтобы он всегда был виден, независимо от того, как пользователь открывает и перемещает представления.

Я изучил пример iAdSuite в примере кода Apple, но, несмотря на то, что он входит в число «лучших практик», я не думаю, что это лучший метод для того, что мне нужно. Он в основном объявляет ADBannerView в классе делегата приложения, а затем реализует методы ADBannerViewDelegate для каждого представления, необходимого приложению. Это означает, что нужно снова и снова реализовывать методы ADBannerViewDelegate для каждого необходимого вам класса контроллера представления! Это не кажется слишком умным ...: (

Я бы предпочел иметь подход, более похожий на тот, что делает сама Apple в приложении на основе панели вкладок, где у вас есть часть окна, всегда занятая контроллером вкладок, и все представления переключаются выше, не затрагивая вкладку Бар вид ниже. Вы не можете напрямую поместить ADBannerView вместе с контроллером навигации в делегат приложения, потому что ADBanner нужно поместить в контроллер представления (в противном случае вы получите ошибку времени выполнения).

Я попытался создать подкласс от UIViewController, реализуя ADBannerViewDelegate в этом классе, и поместил его в rootViewController вместе с UINavigationController, но мне не повезло с этим подходом ...

Кто-нибудь нашел хороший, простой способ сделать это? Любой намек?

Спасибо за любую помощь ...

1 Ответ

2 голосов
/ 12 апреля 2011

Вы можете иметь только один класс для ADBannerViewDelegate и только один экземпляр ADBanner. Когда текущий активный вид изменится, удалите ADBanner из старого вида, добавьте его как подпредставление в новый вид.

EDIT:

, чтобы уточнить, вам не нужно, чтобы каждое представление реализовывало ADBannerViewDelegate. Вы должны иметь только один класс, реализующий его (этот класс не должен быть контроллером представления в этом отношении).

Вам также понадобится сохранить где-нибудь свойство, которое указывало бы на активный в данный момент вид (например, вы можете обновить это свойство в navigationController:didShowViewController:animated: вашего контроллера навигации или придумать свой собственный протокол для этого, если ваши представления появляются в более сложный способ).

Тогда в вашем ADBannerViewDelegate вы просто измените размер представления, на которое в данный момент указывает это свойство текущего представления. Фактическое представление даже не должно знать, что в нем есть реклама;)

...