3

我想将 ADBannerView 对象静态放置到我的 UITableView 屏幕上,这意味着我希望它始终保持在我的工具栏(self.navigationController.toolbar)上方,即使用户正在滚动 tableview。我通过将 ADBannerView 作为子视图添加到我的工具栏并为框架原点赋予负值来解决了这个问题:

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

唯一的问题是:我无法以这种方式点击并打开 iAd - 我可以看到横幅,但是当我点击它时没有任何反应。

由于我也在使用 refreshControl,因此使用 UIViewController 代替 UITableViewController 并手动添加 tableView 的选项对我不起作用。有没有其他方法可以让我的 ADBannerView 静态显示在我的表格视图控制器中并且仍然可以点击?

谢谢指教!

4

3 回答 3

8

耶!!毕竟,我自己(以及大量阅读)成功地解决了这个(非常烦人的)问题!

首先,我发现了这个真正改变世界的帖子。基本上这篇文章处理 UITableViewController 使用 self.view 作为其 tableView 属性的主题,因此覆盖 tableView 属性(或手动合成它)加上给 self.view 一个新视图(来自应用程序)并添加 tableView 作为它的子视图可以到达tableView的真正superview。

但这仍然没有解决我的问题,尽管我确信它会,因为这一切都是有道理的。我的bannerView 出现在正确的位置(并且已修复),但单击时它仍然没有执行任何操作。但是还有第二件我不知道的小事:

正如我在这篇文章中所读到的,子视图的超级视图不仅必须是 userInteractionEnabled,而且还必须具有不透明的背景颜色。因为我的 superviews 背景颜色设置为 [UIColor clearColor] ,所以这一切都不起作用 - 但是将其 backGroundColor 设置为例如 blackColor 解决了整个问题:bannerView 终于可以点击了!:)

所以,我的代码现在看起来像这样:

@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 以连接嵌入 segue。

于 2012-11-29T21:27:23.887 回答