- 总体:
谁想做什么事,谁就定义协议,并设置一个代理;
谁想帮做什么事,谁就遵守协议并实现方法。
#import <UIKit/UIKit.h>
@class SecondVC;
@protocol passValueDelegate <NSObject>
@optional
- (void)viewController:(SecondVC*)secondVC passInfo:(id)info;
@end
@interface SecondVC : UIViewController
@property (weak, nonatomic) IBOutlet UITextField *textField;
@property (weak, nonatomic) IBOutlet UIButton *backToFirstVCButton;
@property (nonatomic,weak)id<passValueDelegate>passDelegate;
@end
#import "SecondVC.h"
@interface SecondVC ()
@end
@implementation SecondVC
- (void)viewDidLoad {
[super viewDidLoad];
[self.backToFirstVCButton addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside];
}
-(void)buttonClick:(UIButton*)sender{
if (self.passDelegate && [self.passDelegate respondsToSelector:@selector(viewController:passInfo:)]) {
[self.passDelegate viewController:self passInfo:self.textField.text];
}
[self dismissViewControllerAnimated:true completion:nil];
}
@end
#import "FirstVC.h"
#import "SecondVC.h"
@interface FirstVC ()<passValueDelegate> // 遵守协议
@end
@implementation FirstVC
- (void)viewDidLoad {
[super viewDidLoad];
[self.toSecondVCButton addTarget:self action:@selector(toSecond:) forControlEvents:UIControlEventTouchUpInside];
}
- (void)toSecond:(UIButton*)sender{
SecondVC * secondVC = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"SecondVC"];
secondVC.passDelegate = self;
[self presentViewController:secondVC animated:true completion:nil];
}
- (void)viewController:(SecondVC *)secondVC passInfo:(id)info{
self.label.text = info;
}
@end