UINavigationController

UINavigationController

使用基于 UINavigationController 的标准应用程序是否可以在屏幕底部、 View 层次结构下方显示单个 ADBannerView?也就是说,在不修改可以推送到根 UINavigationController 的每个 View Controller / View 的情况下,我可以让全局 ADBannerView 可见吗?

我不确定如何在 IB 或代码中进行设置。帮助?

我看到类似的问题,答案含糊不清。我正在寻找一个具体的例子。

最佳答案

编辑:在 iOS5+ 中执行此操作的更好方法可能是使用 View Controller 包含。也就是说,创建一个包含您的广告和应用程序 Controller (导航、标签等)的根 Controller 。

我想出了一种方法来做到这一点。这是我所做的:

对于我的第一次尝试,我创建了一个名为 AdBannerController 的新 View Controller 。对于它的 View ,我创建了一个全屏 View 和两个 subview 。第一个 subview (contentView) 用于常规内容,第二个 subview 是 AdBannerView。我使用此 View Controller 的一个实例作为与应用程序窗口关联的 View Controller ( [window addSubview: adBannerController.view] )。然后我添加了我的 UINavigationController.view 作为 adBannerController.view 的 subview :[adBannerController.contentView addSubview:navigationController.view]。

除了推送到 UINavigationController 的 View Controller 从未调用它们的 will/did-load/unload 方法外,这主要是有效的。嘘。我在几个地方读到这是 UINavigationController View 不是应用程序窗口的直接后代的症状。

对于我的第二次尝试,我采用了相同的 AdBannerController 并将其派生自 UINavigationController。这一次,我在 loadView 中做了以下事情:

- (void)loadView
{
    [super loadView];

    _contentView = [self.view retain];

    self.view = [[[UIView alloc] initWithFrame: _contentView.frame] autorelease];

    [self.view addSubview: _contentView];

    _adView = [[ADBannerView alloc] initWithFrame: CGRectMake(0, _contentView.bounds.size.height, 320, 50)];
    _adView.currentContentSizeIdentifier = ADBannerContentSizeIdentifier320x50;
    _adView.delegate = self;

    [self.view addSubview: _adView];

    /* for visual debugging of view layout
    [[_mainView layer] setCornerRadius: 6.0];
    [[_mainView layer] setMasksToBounds: YES];
    [[_mainView layer] setBorderWidth: 1.5];
    [[_mainView layer] setBorderColor: [[UIColor grayColor] CGColor]];
     */
}

注意会发生什么 - 我让父类(super class) UINavigationController 构建其常规的“内容” View ,但我将其换出并替换为我自己的 View ,该 View 是内容和广告 View 的容器。

这很好用。我也在使用three20,需要做一些事情才能使用该设置进行这项工作,但还不错。

我希望这可以帮助别人!

关于iphone - iPhone 应用程序中的全局 ADBannerView,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3669272/

10-14 20:57