CommandTabel_代理方法

今天老师带我们又重新复习了一遍block,对于block的应用场景,内存管理还有block的语法,以前学习的时候感觉很难,听的懵懵懂懂,今天老师带着又复习一遍以后,感觉又懂了不少, 下面我就来分享一下今天我个人听明白的知识点。

CommandTabel可以用代理的方法实现,也可以用block, 先说说代理吧

 代理其实就是一些方法列表,让你实现必须的方法还有可选的方法

1.使用CMDTabel自己写一个代理,并且写出里面的方法

   1)创建一个继承于NSObject的类,命名为CMDTabel;

   2).h 声明代理属性

           ||代理的名字(注:看看任意一个delegate就可以观察到  @protocol  某某的代理 <NSObject> )

@protocol CMDTableDatasource <NSObject>

//设置的代理方法,其中设置的代理方法可以规定谁是必须实现的 谁是选择实现的

//@required

 观察其他的代理你会发现 系统的方法都会表明谁的代理--- CMDTable:(CMDTabel*)table

//返回行数

- (NSInteger)CMDTableNumberOfRows:(CMDTabel*)table;

//返回某一行的数据

- (NSString *)CMDTable:(CMDTabel*)table textForRowAtIndex:(NSInteger)row;

@end

    3)设置数据的代理

 

// 签署名字为CMDTableDatasource的代理方法,类似与

/**

 *  @interface ViewController : UIViewController<UIPickerViewDataSource>

 **/

@property(nonatomic,weak)id<CMDTableDatasource>dataSource;

    4)  开放一个类方法  方便外部调用

 - (void)reloadTabel;

    5)  .m文件

实现方法的作用

// 更新table

- (void)reloadTabel{

//    获取行数

    NSInteger number = [_dataSource CMDTableNumberOfRows:self];

    

    for (int i = 0; i <number; i++) {

        

        NSLog(@"%@",[_dataSource CMDTable:self textForRowAtIndex:i]);

    }

}

2.创建一个继承于NSObject的类 命名为Controller。

   1)签署代理协议 

  .h

@interface Controller : NSObject<CMDTableDatasource>

{

存放数据的数组

 NSArray* dataList;

    

    //数据展示容器

    CMDTabel *tableView;

}

开放的实例方法,方便外部调用

-(void)viewDidLoad;

3.实现代理方法

#pragma mark   CMD的代理方法

//返回行数

- (NSInteger)CMDTableNumberOfRows:(CMDTabel*)table {

    

    return dataList.count;

    

}

//返回某一行的数据

- (NSString *)CMDTable:(CMDTabel*)table textForRowAtIndex:(NSInteger)row{

    

    return [dataList objectAtIndex:row];

}

4.展示数据

-(void)viewDidLoad{

    

    dataList = @[@"第一页",@"第一页",@"第一页",@"第一页",@"第一页",@"第一页",@"第一页"];

    tableView = [[CMDTabel alloc]init];

    

    

//    tableView.deledate = self;

//                 ||

    tableView.dataSource = self;

    

    [tableView reloadTabel];

    

}

刚开始使用的时候不明白代理是怎么自己编写的,后边的签署代理的时候 也不知道签署的是代理的名字。其实有一句

  tableView.dataSource = self; 就相当于

    tableView.deledate = self;

 。

自己编写代理方法的时候要参考系统的代理方法,谁的代理方法要注明清除

例如:(系统的tableView)

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;

我们自己编写的时候也要注意

- (NSString *)CMDTable:(CMDTabel*)table textForRowAtIndex:(NSInteger)row;

OK  今天先写到这里,俺要继续去学习了, 也不知道大家能不能看懂,如果不是很清楚 可以留言告诉我,希望可以帮助到大家。

-----< 上帝宠儿>

求知若饥,虚心若愚。

原文地址:https://www.cnblogs.com/jiao930131/p/4761598.html