①在后面的控制器的 .h文件 中声明协议和代理方法
#import <UIKit/UIKit.h>
@protocol NewControllerDelegate <NSObject>
- (void)text:(NSString *)str;
@end
@interface NewViewController : UIViewController
@property (nonatomic, assign) id <NewControllerDelegate> delegate;
@end
②在后面控制器的 .m文件 中将值传入代理方法中
if (self.delegate && [self.delegate respondsToSelector:@selector(text:)]) {
[self.delegate text:@"啊啊啊"];
}
③在前面控制器的 .m文件 中遵守协议,设置代理,实现代理方法
#import "ViewController.h"
#import "NewViewController.h"
@interface ViewController () <NewControllerDelegate>
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
UIButton *button = [UIButton buttonWithType:(UIButtonTypeRoundedRect)];
button.frame = CGRectMake(0, 100, 100, 100);
button.backgroundColor = [UIColor redColor];
[button addTarget:self action:@selector(push) forControlEvents:(UIControlEventTouchUpInside)];
[self.view addSubview:button];
}
- (void)push
{
NewViewController *newVC = [[NewViewController alloc] init];
newVC.delegate = self;
[self.navigationController pushViewController:newVC animated:YES];
}
- (void)text:(NSString *)str
{
NSLog(@"%@", str);
}
④最后实现效果是:当我点击后面控制器的返回按钮时,控制台打印出了"啊啊啊".
到此,完成从后面控制器向前面控制器传值.