iOS我可以把所有的委托方法放在另一个类上。 将代表inheritance到视图控制器

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

例如:

ViewController.m

#import <UIKit/UIKit.h> @interface ViewController : UIViewController<UITableViewDataSource,UITableViewDelegate> @end 

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

 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return sample.count; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ return cell; } 

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

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

我想他想把委托方法提取到一个单独的类中。 所以创build一个自定义类:

TableViewHelper.h

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

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

 @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不再需要实现这两个协议。

对于文档 :

当一个类采用一个协议时,它必须实现协议声明的必要的方法,如前所述。 另外,它必须符合所采用的协议所包含的任何协议。 如果一个合并的协议还包含其他协议,那么这个类也必须符合它们。 一个类可以使用以下任何一种技术符合一个合并的协议:
– 实现协议声明的方法
– inheritance一个采用该协议的类并实现该方法

所以基本上你可以创build一个符合协议的类(例如一个ViewController类),并且可以使一个特定的InheritedViewControllerinheritance自其他实现协议的类

创build一个CustomViewController(一个UIViewController子类)。 您的自定义视图控制器应该确认所有的协议,提供数据源和处理代表。 之后,当您创build任何UIViewController类时,只需从您自己的CustomViewControllerinheritance,并覆盖所有您需要的方法。

您也可以保留一个UITableView的IBOutlet,并在需要的地方连接您的子控制器。 这样,您将拥有许多其他好处,例如可以将活动指示器方法保留在一般位置,并处理其他常用通知。

为此使用协议

在这里我添加了一个用户友好的链接,希望你得到一些与你有关的东西

是的,你可以这样做。

 @implementation SecondViewController - (void)viewDidLoad { [super viewDidLoad]; ViewController *vc = [[ViewController alloc] init]; myTableView.delegate = vc; //Initialized Controller myTableView.dataSource = vc; // Do any additional setup after loading the view, typically from a nib. } @end 

你也可以在Xib中做同样的事情。