2012-03-25 4 views
7

私はブログサイト用のアプリケーションを構築しています。下のiAd UINavigationControllerの中のUITableViewController

それがルートビューだと私はのUITableViewControllerとUINavigationControllerを持っています。

私は、ストーリーボードに何の問題も、これをレイアウトしていないが、私は、画面の下部とXcodeへのiAdビューは、私はそれを追加できなくなるドラッグしようとしています。

私はUITableViewControllerのサブクラスからUIViewControllerのサブクラスに切り替えて、サブクラス化されたUIViewControllerにデリゲートとデータソースのメソッドを配置する必要があるようです。

これは私には間違っているようです。私はちょうど...下部に

アドバイスをナビゲーションバーまでトップで、記事の見出しののUITableViewで終わるしようとしている、とのiAdてる?提案?

ありがとうございます。これを実現する最も簡単な方法の

答えて

23

一つがUITableViewtableFooterViewプロパティを使用しています。はい、私はフッターがテーブルの底にとどまっていることを知っていますが、そうする必要はありません。そのフレームをテーブル内に設定することができます。そのようなフッターとしてのiAdを追加します。

self.tableView.tableFooterView = iAd; 

その後、UIScrollViewデリゲートメソッドを実装し、テーブルのスクロールなどのiAdのフレームを調整する:(UITableViewUIScrollViewのサブクラスであるので、これは可能である)

-(void)scrollViewDidScroll:(UIScrollView *)scrollView{ 
    CGRect iAdFrame = iAd.frame; 
    CGFloat newOriginY = table.contentOffset.y + table.frame.size.height - iAdFrame.size.height; 
    CGRect newIAdFrame = CGRectMake(iAdFrame.origin.x, newOriginY, iAdFrame.size.width, iAdFrame.size.height); 
    iAd.frame = newIAdFrame; 
} 

あなたは実装が十分に簡単であることがわかります。 contentOffsetyを使用して、iAdのフレームがどの程度下がっているかを判断するだけです。

+1

ありがとうございました。しかし、レコードのために、私はviewControllerとtableViewControllerを使う代わりにtableViewを使いました。だから、tableViewのサイズを変更して、iAdを下に置いても問題はありませんでした。 – overeasy

+0

私のアプリケーションでこのコードを動作させる方法はわかりません。私はバナービューを私のテーブルビューのテーブルビューフッターにドラッグしましたが、そこからどこに行くのかわかりません。この変数 'iAd'はどこに割り当てられていますか? –

+0

私は、新しい 'AdBannerView'をプログラムで初期化しました。 –

2

IはtableFooterViewの位置を調整することでNJonesによって上記の例を使用しようとしたが、私は、データを再ロードまたはテーブルを更新するとき、それを管理するために困難であったが分かりました。

次に、tableViewControllerのビューののスーパービューにiAdバナーを追加することでこれが可能であることがわかりました。

self.bannerViewController = [[BannerViewController alloc] init]; 
[self.bannerViewController.view setHidden:YES]; 
[self.bannerViewController.view setFrame:CGRectMake(0, self.view.superview.frame.size.height - self.tabBarController.tabBar.frame.size.height - 50, 320, 50)]; 

[self.view.superview addSubview:self.bannerViewController.view]; 
[self.bannerViewController loadBanner]; 

バナーがありましたので、私は、私はNJonesによって投稿ソリューションにいくつかの変更をしなければならなかったtableViewController

-(void)bannerDidLoad{ 
    [self.bannerViewController.view setHidden:NO]; 
    self.tableView.tableFooterView = [[UIView alloc]; 
    initWithFrame:self.bannerViewController.view.frame]; 
} 
0

の最後のセルのためのスペースを作るためにtableFooterViewを作成ロードされると広告が他のすべてのセル/ビューの上に表示されない問題。

@interface MyTableViewController() <ADBannerViewDelegate> 

tableviewcontrollerにAdBannerを追加:

まず、あなたのtableViewControllerがAdBannerViewDelegateであることを確認してください

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    ... 
    ADBannerView *adBanner = [[ADBannerView alloc]initWithAdType:ADAdTypeBanner]; 
    adBanner.delegate = self; 
    self.tableView.tableFooterView = adBanner; 
} 

NJonesから取得された広告バナーを配置するためのコード、私は唯一の追加広告バナーを前面に表示する最後の行:

-(void)positionAdBanner { 
    ADBannerView *adBanner = (ADBannerView *) self.tableView.tableFooterView; 
    if (adBanner) { 
     CGRect iAdFrame = adBanner.frame; 
     CGFloat newOriginY = self.tableView.contentOffset.y + self.tableView.frame.size.height - iAdFrame.size.height; 
     CGRect newIAdFrame = CGRectMake(iAdFrame.origin.x, newOriginY, iAdFrame.size.width, iAdFrame.size.height); 
     adBanner.frame = newIAdFrame; 
     [self.tableView bringSubviewToFront:adBanner]; 
    } 
} 

Thi sのビューは、サブビューをレイアウトしようとするたびに機能が(など、スクロールをチェックするために必要なので、あなたはここでしかそれを必要とする)と呼ばれなかっます:

-(void)viewWillLayoutSubviews{ 
    [super viewWillLayoutSubviews]; 
    [self positionAdBanner]; 
} 

ます。またADBannerViewDelegateメソッドを処理する必要があります

-(void)bannerViewDidLoadAd:(ADBannerView *)banner 
{ 
    banner.hidden = NO; 
    [self positionAdBanner]; 
} 
-(void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error 
{ 
    banner.hidden = YES; 
} 
関連する問題