需求:
假设有两个页面,View1喝View2,点击view1跳转到view2,view2处理完事件之后回到view1并且view1获取view2传回的值。
实现:
1.定义一个接口类:Mydeledate
@protocol MyDeletage
-(void)valueChanged:(NSString *) value;
@end
2.view1.h中声明接口
#import <UIKit/UIKit.h>
#import "MyDeletage.h"
@interface ViewController : UIViewController<MyDeletage>
@end
3.view1.m中实现接口方法
-(void) valueChanged:(NSString *)value{
NSLog(@"传过来的值是---->%@",value);
}
点击跳转到view2的时候需要注意
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
Hero *h = _heros[indexPath.row];
// DetailViewViewController *dv = [[DetailViewViewController alloc] init];
DetailViewViewController *dv = [self.storyboard instantiateViewControllerWithIdentifier:@"detailSB"];
dv.hero = h;
//<span style="color:#ff6666;">需要注意的是这里,将view2的接口代理绑定到当前页面</span>
dv.delegate = self;
[self.navigationController pushViewController:dv animated:YES];
// [self presentViewController:dv animated:YES completion:nil];
}
4.view2.h中 定义接口delegate
#import <UIKit/UIKit.h>
#import "Hero.h"
#include "MyDeletage.h"
@interface DetailViewViewController : UIViewController
@property (strong, nonatomic) IBOutlet UILabel *name;
@property (strong, nonatomic) IBOutlet UILabel *intro;
@property (strong, nonatomic) IBOutlet UIImageView *icon;
@property Hero *hero;
@property id<MyDeletage>delegate;
@end
5.view2.m中实现方法(这里做了一个简单的点击事件,传回一个字符串)
- (IBAction)clickBack:(UIBarButtonItem *)sender {
[self.delegate valueChanged:@"value changed!!"];
[self.navigationController popViewControllerAnimated:YES];
}
传过来的值是---->value changed!!
以上。