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时,将使用这些方法.如果我愿意,我可以覆盖它们.
这可以通过课堂实现吗?还是需要其他实体?
我认为他想将委托方法提取到一个单独的类中.所以创建一个自定义类:
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不再需要实现这两个协议了.