//场景:第二级界面想要将它的内容显示第一级界面上
//分析:第二级界面想要显示自己的内容,但是自己做不到,需要第一级界面来帮他完成。
//三要素: 协议代理 block
//委托:第二级界面 1 3
//协议:显示指定内容 2 2
//代理:第一级界面 3 1
FirstView.h
#import <Foundation/Foundation.h>
//- (void)showData:(NSString *)str;
FirstView : NSObject
//直接拥有协议方法
@property(nonatomic, copy) void (^showData)(NSString * str);
FirstView.m
#import "FirstView.h"
@implementation FirstView
SecondView.h
#import <Foundation/Foundation.h>
@interface SecondView : NSObject
//拥有代理(拥有一个有能力帮他做事情的对象)
//在适当的时候让有能力帮他做事情对象去做事
- (void)askToShowData:(NSString *)str;
@end
SecondView.m
#import "SecondView.h"
#import "FirstView.h"
@implementation SecondView
- (void)askToShowData:(NSString *)str{
//在委托需要做事情的时候,就创建一个有能力帮他做事的对象
FirstView * first = [[FirstView alloc] init];
//代理创建完后不要忘记去实现block代码段
[first setShowData:^(NSString * tstr) {
NSLog(@"%@", tstr);
NSLog(@"%@", str);
}];
//让代理去帮忙做事
//调用block的时候,要保证已经使用代码段给block赋值了
first.showData(str);
}
@end
main.m
#import <Foundation/Foundation.h>
#import "SecondView.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
SecondView * second = [[SecondView alloc] init];
[second askToShowData:@"呵呵"];
}
return 0;
}