zoukankan      html  css  js  c++  java
  • 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  今天先写到这里,俺要继续去学习了, 也不知道大家能不能看懂,如果不是很清楚 可以留言告诉我,希望可以帮助到大家。

    -----< 上帝宠儿>

    求知若饥,虚心若愚。

  • 相关阅读:
    作为一个前端,可以如何机智地弄坏一台电脑?
    Mysql数据库字符集问题
    代码扫描工具 SonarQube Scanner 配置 & Jenkins 集成
    【C++】统计代码覆盖率(四)
    【Jenkins】各项配置
    python小知识点汇总
    MobaXterm使用
    PHP代码覆盖率
    golang代码覆盖率
    压测工具Locuse的使用
  • 原文地址:https://www.cnblogs.com/jiao930131/p/4761598.html
Copyright © 2011-2022 走看看