是什么?
- 通过自定义代理的方式实现
点击➕ / ➖ 实现对总价对应的更改!
思路
- 场景
- ➕/➖ 在自定义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
注意:
- 缺陷
自定义Cell里面,设置代理对象属性
@property (nonatomic, weak)ViewController *delegate;
这样导致:- Cell和VC之间太紧密了,不利于后期扩展。
- Cell依赖于VC,但如果需要使用其他VC时,用不了。
也可以看看
- protocol - 协议01基础
- delegate - 代理基础01
- delegate - 代理基础02
- delegate - 代理基础03
- 代理设计模型-自定义
- delegate - ScrollView01
来自于哪里?
- iOS-MJ-UI基础-大神班/day-11/08-代理的简单实现
网友评论