问题描述
我想要的是将所有的委托方法集中到一个类中。
What I want is to centralize all my delegate methods into a class. Where I can either use its defaults or override the delegate method.
例如:
ViewController.m
ViewController.m
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController<UITableViewDataSource,UITableViewDelegate>
@end
ViewController.h
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.
}
TableDelegateContainers.h
TableDelegateContainers.h
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return sample.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
return cell;
}
基本上UITableViewDataSource需要的所有委托方法都会放到另一个类中。当我将该类导入到ViewController.h中时,将使用这些方法。如果我想,我可以覆盖它们。
Basically all the delegate methods that the UITableViewDataSource need will be put to another class. And when I import that class to thew ViewController.h those methods will be used. And I can either overwrite them if I want to.
这是可以通过类实现吗?或者需要其他实体?
Is this achievable by class? Or other entity is needed?
推荐答案
我想他想将委托方法提取到一个单独的类中。因此建立自订类别:
I think he wants to extract the delegate methods into a separate class. so create a custom class:
TableViewHelper.h
TableViewHelper.h
@interface TableViewHelper : NSObject<UITableViewDataSource,UITableViewDelegate>
- (id) initWithTableView: (UITableView *) tableView;
@end
TableViewHelper.m
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
ViewController.m
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
,因此您的ViewController不需要实现protocoly
so your ViewController does not need to implement both protocoly anymore.
这篇关于iOS可以将所有委托方法放在另一个类上。将代理继承到视图控制器中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!