2

我正在尝试为 iOS 应用程序中的多个视图实现简单的 AdBanner 实例。为了在 viewController 中实现 AdbannerDelegate,必须执行 bannerview.delegate= self; 其中bannerview 是AdBannerView 的一个实例。然而,这个委托方法必须在每个 viewController 中实现,这相当于很多重复代码。如何组成一个实现所有委托方法的简单类,然后在每个视图控制器中调用它们。

4

2 回答 2

2

我认为您使用的 viewControllers 是 UIViewController 的子类。
你是说所有的 viewControllers 都有相同的委托方法。

所以,我想做的是UIDelgateViewController通过 SubClassing 创建新的 ViewController 类()UIViewController并在那里添加所有委托方法,并让所有其他 viewControllers 子类 UIDelgateViewController

代码是这样的,
.h 文件->

@interface UIDelegateViewController : UIViewController<ADBannerViewDelegate>
@property ADBannerView *bannerView;
@end

.m 文件 ->

#import "UIDelegateViewController.h"

@interface UIDelegateViewController ()

@end

@implementation UIDelegateViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    _bannerView = [[ADBannerView alloc] init];
    _bannerView.delegate =self;
}

-(void)bannerDelegateMethod{

}

现在你的一些 viewController ->

#import "UIDelegateViewController.h"

@interface SomeViewController : UIDelegateViewController

@end


#import "SomeViewController.h"

@interface SomeViewController ()

@end

@implementation SomeViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    [self.view addSubview:self.bannerView];
    self.bannerView.frame = ..../
}
于 2014-01-23T17:25:26.823 回答
1

如果您想在导航和更改视图时始终在屏幕上保持相同的横幅,您应该考虑使用View Controller 包含 API
一个很好的例子是Apple 编写的非凡示例代码,它展示了如何在移动时保持相同的横幅实例在标签栏或导航控制器中。对于您的项目来说,这也可能是一个很好的开始。

于 2014-01-23T17:33:49.440 回答