1

我正在尝试制作一个处理 iAd 的可重用类。

在我的.h file我做以下:

#import <iAd/iAd.h>

@protocol AdHelperDelegate;

@interface AdHelper:NSObject<ADBannerViewDelegate>

@property (strong) id<AdHelperDelegate> delegate;
@property (nonatomic, strong) ADBannerView *iAdBannerView;
...
@end

@protocol AdHelperDelegate;
@end

然后在我.m file实施 iAd 横幅:

-(void)showBanner
{
    self.iAdBannerView = [[ADBannerView alloc] initWithFrame:CGRectZero];
    self.iAdBannerView.frame = CGRectOffset(self.iAdBannerView.frame, 0, 361);
    self.iAdBannerView.requiredContentSizeIdentifiers = [NSSet setWithObject:ADBannerContentSizeIdentifierPortrait];
    self.iAdBannerView.currentContentSizeIdentifier = ADBannerContentSizeIdentifierPortrait;
    self.iAdBannerView.delegate = self;
    [self.delegate.view addSubview:self.iAdBannerView];
}

我当然也实现了委托方法-(void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error

我打算在我的项目中调用AdHelper一个UIViewController类似的东西:

AdHelper *ah = [[AdHelper alloc] init];
ah.delegate = self;
[ah showBanner];

问题是编译器说:Property 'view' not found on object of type 'id<AdHelperDelegate>'
我有办法访问委托的视图吗?

4

2 回答 2

3

您需要手动转换视图控制器,以便编译器知道您拥有什么样的对象:

[((MyViewController *)self.delegate).view addSubview:self.iAdBannerView];

您还可以将视图的声明从 更改id<AdHelperDelegate>UIViewController<AdHelperDelegate>*,这将消除在这种情况下进行强制转换的需要。

于 2013-03-06T14:34:05.703 回答
1

您需要idUIViewController. 编译器无法知道 id 具有 view 属性。

[((UIViewController *)self.delegate).view addSubview:self.iAdBannerView];
于 2013-03-06T14:34:30.453 回答