CHGAdapter使用
1 在ios中使用适配器设计模式优化UITableView
1.11.什么是适配器(Adapter)
在日常生活中我们通常听到的适配器有电源适配器、USB适配器等。
当我们的手机充电、或者笔记本电脑充电的时候不能直接使用220V的交流电,必须通过笔记本标配的电源适配器进行一次转化。插线板(UITableView)上有插口(delegate,dataSource),电源适配器(Adapter)的一边插在220V的插座上,另一边插在笔记本电脑(UITableViewCell)的电源处。电源适配器在这里做的工作是将220V的交流电电压转换成适合笔记本电脑需要的直流电电压。
为UITableView设计Adapter
Adapter实现如何给UITableViewCell适配数据。
平时我们一般在Controller中实现UITableView的delegate(UITableViewDataSource,UITableViewDelegate),然后在Controller中实现delegate中的方法,达到给UITableViewCell显示相应的数据。具体的代码大家都很熟悉,这里就不做举例。
使用适配器的做法:
基于Adapter设计模式我本人给UITableView开发了一款适配器框架(CHGAdapter)github:https://github.com/chenhaigang888/CHGAdapter
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
@end
#import "ViewController.h"
#import "CHGTableViewAdapter.h"
@interface ViewController ()
@property(nonatomic,weak) IBOutlet UITableView * tableView;
@property(nonatomic,strong) CHGTableViewAdapter * adapter;
@property(nonatomic,strong) CHGTableViewAdapterData * adapterData;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.adapter.adapterData = self.adapterData;
self.tableView.tableViewAdapter = self.adapter;
[self.tableView setEmptyDataShowWithTitle:@"暂无数据" image:@"icon_dl_xsmm"];
self.tableView.eventTransmissionBlock = ^id(id target, id params, NSInteger tag, CHGCallBack callBack) {
return nil;
};
self.tableView.tableViewDidSelectRowBlock = ^(UITableView *tableView, NSIndexPath *indexPath, id itemData) {
NSLog(@"当前点击section:%li row:%li",indexPath.section,indexPath.row);
};
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
-(CHGTableViewAdapter*)adapter{
if (!_adapter) {
_adapter = [CHGTableViewAdapter new];
_adapter.cellName = @"SimpleTableViewCell";
_adapter.headerName = @"SampleTableViewHeaderFooterView";
_adapter.footerName = @"SampleTableViewHeaderFooterView";
_adapter.cellHeight = -1;
_adapter.headerHeight = 30;
_adapter.footerHeight = 44;
}
return _adapter;
}
-(CHGTableViewAdapterData*) adapterData {
if (!_adapterData) {
_adapterData = [CHGTableViewAdapterData new];
}
_adapterData.cellDatas = @[
@[@"1",@"2",@"3",@"4",@"5",@"6"],
@[@"1",@"2",@"3",@"4",@"5",@"6"]
];
_adapterData.headerDatas = @[@"第一个section的Header",@"第二个section的Header"];
_adapterData.footerDatas = @[@"第一个section的Footer",@"第二个section的Footer"];
return _adapterData;
}
@end