iOS我可以将所有委托方法放在另一个类上.将委托继承到视图控制器中

And*_*rez 2 iphone delegates class objective-c ios

我想要的是将我的所有委托方法集中到一个类中.我可以使用其默认值或覆盖委托方法.

例如:

ViewController.m

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController<UITableViewDataSource,UITableViewDelegate>

@end
Run Code Online (Sandbox Code Playgroud)

ViewController.h

#import "ViewController.h"
#import "TableDelegateContainers.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}
Run Code Online (Sandbox Code Playgroud)

TableDelegateContainers.h

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return sample.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    return cell;
}
Run Code Online (Sandbox Code Playgroud)

基本上UITableViewDataSource需要的所有委托方法都将被放到另一个类中.当我将该类导入到ViewController.h时,将使用这些方法.如果我愿意,我可以覆盖它们.

这可以通过课堂实现吗?还是需要其他实体?

RTa*_*che 8

我认为他想将委托方法提取到一个单独的类中.所以创建一个自定义类:

TableViewHelper.h

@interface TableViewHelper : NSObject<UITableViewDataSource,UITableViewDelegate>
- (id) initWithTableView: (UITableView *) tableView;
@end
Run Code Online (Sandbox Code Playgroud)

TableViewHelper.m

@implementation TableViewHelper

- (id) initWithTableView: (UITableView *) tableView {
    self = [super init];
    if (self) {
        tableView.datasource = self;
        tableView.delegate = self;
    }
    return self;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return sample.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    return cell;
}
@end
Run Code Online (Sandbox Code Playgroud)

ViewController.m

@interface ViewController ()
@property (nonatomic, strong) TableViewHelper *tvHelper;
@end

@implementation ViewController
- (void)viewDidLoad
{
    [super viewDidLoad];
    self.tvHelper = [[TableViewHelper alloc] initWithTableView: self.tableView];
    // Do any additional setup after loading the view, typically from a nib.
}
@end
Run Code Online (Sandbox Code Playgroud)

所以你的ViewController不再需要实现这两个协议了.