代理的使用
工具/原料
方法/步骤
1假设情景:委托方想要在接收到系统截屏通知后执行一个block但是需要用到的数据在另一个界面这个时候我们就需要这个界面充当实现方来写完这个方法
2委托方 及定义协议的一方代码:@protocol MWPhotoScreenShotDelegate - (screenShotBlock)screenShotHandler; @end//定义协议/*下面两个方法添加了截屏通知的处理 :总的就是通知调用了这个方法[self.screenShotDelegate screenShotHandler]] 但是这个方法要用到另一个界面的数据 所以这个界面直接调用了方法名 但是没有写方法的具体内容*/@property (nonatomic, weak) id screenShotDelegate;//设置代理属性@property (strong, nonatomic) id localeChangeObserver; [[NSNotificationCenter defaultCenter] removeObserver:_localeChangeObserver]; if (self.screenShotDelegate && [self.screenShotDelegate respondsToSelector:@selector(screenShotHandler)]) { NSOperationQueue *mainQueue = [NSOperationQueue mainQueue]; _localeChangeObserver = [[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationUserDidTakeScreenshotNotification object:nil queue:mainQueue usingBlock:[self.screenShotDelegate screenShotHandler]]; }- (void)viewDidDisappear:(BOOL)animated{ [super viewDidDisappear:animated]; [[NSNotificationCenter defaultCenter] removeObserver:_localeChangeObserver]; _localeChangeObserver = nil;}
3typedef void(^screenShotBlock)(NSNotification *note);添加代理MWPhotoScreenShotDelegate即:假设委托方 是一个名为A的UIView类则UIView *A = [[UIView alloc]init];A. MWPhotoScreenShotDelegate = self;- (screenShotBlock)screenShotHandler{.......................//这里是实现 就不用我写了吧}
方法/步骤2
如果让实现方法返回某种类型的值也可以达到传参的效果即所谓的代理传参(就不一一讲了)