本文介绍了iOS可以将所有委托方法放在另一个类上。将代理继承到视图控制器中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想要的是将所有的委托方法集中到一个类中。

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可以将所有委托方法放在另一个类上。将代理继承到视图控制器中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-31 19:54