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
05-04 07:26