3

UITableView 画面に ADBannerView オブジェクトを静的に配置したいのですが、ユーザーがテーブルビューをスクロールしている場合でも、常にツールバー (self.navigationController.toolbar) の上に配置したいということです。これを解決するには、ADBannerView をサブビューとしてツールバーに追加し、フレームの原点に負の値を指定します。

[self setBannerViewSize];
[self.navigationController.toolbar addSubview:bannerView];

唯一の問題は、この方法で iAd をクリックして開くことができないことです。バナーは表示されますが、タップしても何も起こりません。

私はrefreshControlも使用しているため、UITableViewControllerの代わりにUIViewControllerを使用してtableViewを手動で追加するオプションは機能しません。ADBannerView をテーブル ビュー コントローラーに静的に表示し、タップ可能にする他の方法はありますか?

アドバイスありがとうございます!

4

3 に答える 3

8

わーい!!結局のところ、私はこの (本当に厄介な) 問題を自分で解決することに成功しました (そして、たくさん読んで)!

最初に、この本当に世界を変える投稿を見つけました。基本的に、この投稿は、UITableViewController がその tableView プロパティに self.view を使用するというトピックを処理するため、tableView プロパティをオーバーライドする (または手動で合成する) ことに加えて、(アプリケーションから) self.view に新しいビューを与え、そのサブビューとして tableView を追加すると、tableViewの実際のスーパービューに到達することができます。

しかし、それでも問題は解決しませんでした。すべてが理にかなっているからです。私の bannerView は正しい場所に表示されました (そして修正されました) が、クリックしても何もしませんでした。しかし、私が知らなかった 2 番目のマイナーなことがありました。

この投稿で読んだように、サブビューのスーパービューは userInteractionEnabled である必要があるだけでなく、非透明な backgroundColor も持つ必要があります。スーパービューの背景色が [UIColor clearColor] に設定されていたため、すべてが機能しませんでしたが、backGroundColor をたとえば blackColor に設定すると、問題全体が解決しました。:)

したがって、私のコードは次のようになります。

@synthesize tableView;

- (void)viewDidLoad
{
    [super viewDidLoad];

    if (!tableView && [self.view isKindOfClass:[UITableView class]]) {
        tableView = (UITableView *)self.view;
    }

    self.view = [[UIView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame];
    self.tableView.frame = self.view.bounds;
    [self.view addSubview:self.tableView];

    [self resizeTableToFitBanner];
    self.view.backgroundColor = [UIColor whiteColor];
    [self.view addSubview:bannerView];

    // some other code
}
于 2012-11-29T21:42:33.597 に答える
2

Apple の iAdSuite サンプル コードの BannerViewController は、この問題を非常にエレガントに解決します。

https://developer.apple.com/library/ios/samplecode/iAdSuite/Introduction/Intro.html

于 2014-03-03T22:56:08.403 に答える
0

コンテナ ビューを使用して、IB でセットアップする必要があると思います。ナビゲーション コントローラーのルート ビュー コントローラーのビューの下部に、ツールバーと ADBannerView を追加できます。残りのスペースをコンテナー ビューで埋めます。これにより、組み込みのビュー コントローラーが自動的に提供されます。これを削除してから、tableViewController にドラッグし、コンテナ ビューから tableViewController にコントロール ドラッグして、埋め込みセグエをフックする必要があります。

于 2012-11-29T21:27:23.887 に答える