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
类),并且可以使一个特定的InheritedViewController
inheritance自其他实现协议的类
创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中做同样的事情。