RootViewControllers页面push到DetailViewControllers页面,如果DetailViewControllers页面的信息想回传(回调)到RootViewControllers页面,用代理传值,其中DetailViewControllers定义协议和声明代理,RootViewControllers确认并实现代理,RootViewControllers作为DetailViewControllers的代理
首先在DetailViewControllers.h文件中我们创建协议方法
#import <UIKit/UIKit.h>
@class DetailViewController;
@protocol PassingValueDelegate <NSObject>
@optional
-(void)viewController:(DetailViewController *)viewcontroller didPassingValueWithInfo:(NSString *)info;
@end
@interface DetailViewController : UIViewController
@property (nonatomic,assign) id <PassingValueDelegate> delegate;//通过代理对象传值
@end
在DetailViewControllers的.m中我们判定代理对象存在时,为其绑定相应方法
-(void)viewDidDisappear:(BOOL)animated{
[super viewDidDisappear:animated];
//下面的代码写在你需要点击回传的点击事件里面
if (self.delegate && [self.delegate respondsToSelector:@selector(viewController:didPassingValueWithInfo:)]) {
[self.delegate viewController:self didPassingValueWithInfo:@"10"];
}
}
RootViewControllers的.m文件中我们指定代理并让其执行代理的方法,并用一个label显示传过来的值
#import "RootViewController.h"
#import "DetailViewController.h"
@interface RootViewController () <PassingValueDelegate>
@end
@implementation RootViewController
- (void)viewDidLoad {
[super viewDidLoad];
UIButton *button=[UIButton buttonWithType:UIButtonTypeCustom];
button.backgroundColor=[UIColor blueColor];
button.frame=CGRectMake(100, 100, 40, 20);
[button addTarget:self action:@selector(Push:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];
}
-(void)Push:(UIButton *)sender{
DetailViewController *detailVC=[[DetailViewController alloc] init];
detailVC.delegate=self;
[self.navigationController pushViewController:detailVC animated:YES];
}
-(void)viewController:(DetailViewController *)viewcontroller didPassingValueWithInfo:(id)info{
UILabel *label=[[UILabel alloc] initWithFrame:CGRectMake(100, 300, 40, 60)];
label.backgroundColor=[UIColor grayColor];
label.text=info;
[self.view addSubview:label];
// self.view.backgroundColor=info;
}