美文网首页
delegate-代理的简单实现-自定义

delegate-代理的简单实现-自定义

作者: js_huh | 来源:发表于2020-07-18 16:29 被阅读0次

    是什么?

    • 通过自定义代理的方式实现
      点击➕ / ➖ 实现对总价对应的更改!

    思路

    • 场景
      • ➕/➖ 在自定义Cell里
      • 总价VC
    • 使用代理需要做什么?
      • 什么是代理?
        因种种原因,我需要叫另外一个人来帮我完成某件事情!
      • 代理对象:
        另外的那个人就是代理对象
      • 代理方法:
        需要完成某件事情就是代理方法
      • 代理属性:
        "我"和"另外那个人"之间,靠着代理属性进行关联。
    • 分析
      • "点击➕/➖ ",这件事谁最清楚 ?自定义Cell最清楚(被代理者)
      • 自定义Cell只是知道,点击了➕/➖。可是要更改"总价"它做不到!
      • 谁做的到呢? "VC"(代理对象)
      • 点击之后,要告诉代理对象,去更改"总价"的价格(代理方法)。
      • 自定义Cell 和 VC之间需要产生关联, 就需要代理属性.
        代理属性在哪里写呢? 在"委托方"Cell里面写!
    • 示例代码
      • 自定义Cell
        • 设置代理对象属性
        • 点击按钮,调用代理方法
        -- 设置代理对象属性
        @interface WineCell : UITableViewCell
        @property (nonatomic, weak)ViewController *delegate;
        @end
        
        - (IBAction)plusClick:(id)sender {
          -- 调用代理方法
          [self.delegate plusTotal:self.wine];
        }
        
      • VC
        • 声明代理方法
        • 设置代理对象
        • 实现代理方法
         @interface ViewController : UIViewController
        - 声明代理方法, 需在`@interface`声明,否则自定义Cell无法拿到此方法。
        -(void)plusTotal:(Wine *) wine;
        -(void)minusTotal:(Wine *) wine;
         @end
        
        - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
          -- 为每一个自定义Cell, 设置代理对象
          ....
          cell.delegate = self;//设置代理对象
         }
        
        -- 实现代理方法
        -(void)plusTotal:(Wine *) wine { ....    }
        

    注意:

    • 缺陷
      自定义Cell里面,设置代理对象属性
      @property (nonatomic, weak)ViewController *delegate;
      这样导致:
      • Cell和VC之间太紧密了,不利于后期扩展。
      • Cell依赖于VC,但如果需要使用其他VC时,用不了。

    也可以看看


    来自于哪里?

    • iOS-MJ-UI基础-大神班/day-11/08-代理的简单实现

    相关文章

      网友评论

          本文标题:delegate-代理的简单实现-自定义

          本文链接:https://www.haomeiwen.com/subject/umkxkktx.html