iOS中"代理传递"

最近在做朋友圈的界面,这这里面可以看到微信,微博,脉脉的影子,大家都知道朋友圈的数据量大,操作繁多,还需要点击区域明确.点赞,转发,评论,举报,进入正文页,进入个人资料页,回复评论,删除评论等等.

每个cel里面这么多控件,自定义cell是必须的,cell里面的控件也需要单独定制,从cell到控制器的操作,我们可以用代理或block,cell里面封装好的子控件我们可以也许使用通知更简单,但是当cell里面的封装的子控件很多的时候,通知也可能不是一种好的做法,到处都是发通知和接收通知.维护起来也没那么容易.

这时候我们可以在cell里面定制的控件中制定一个协议.点击该控件中某个子控件的时候,去判断出发代理.在cell中也制定一个协议,协议方法可以不写,(cell中有点击的时候可以写),在声明代理的时候顺便写一个setter方法,把刚才定制控件的代理拿过来.这时候在控制器中只需要遵守cell中的协议.实现cell中协议的代理方法(如果有的话)和cell中定制控件的代理方法.当有多个控制器需要这个控件时就更能体现这样做的便捷了

例如:在UITableViewCell中定制了一个view,view中放置一个label,把点击label的操作传递到控制器.

//代码:

View.h
@protocol ViewDelegate<NSObject>
- (void)viewClick;
@end
View.m
@property (nonatomic,weak)id<ViewDelegate>delegate;
TableViewCell.h
@class TableViewCell;
@protocol TableViewCellDelegate<ViewDelegate>
//cell中的点击事件
@end

@property (nonatomic,weak,setter=setDelegate:)id<TableViewCellDelegate>delegate;
@property (nonatomic,strong)View *view;
TableViewCell.m
- (void)setDelegate:(id<TableViewCellDelegate>)delegate
{
    _delegate = delegate;
    [_view setDelegate:delegate];
}
TableViewController中遵守TableViewCellDelegate协议
实现协议方法
- (void)viewClick { NSLog(@"点击了view"); }

你可能感兴趣的:(ios,代理,delegate,通知)